Исключение COM при использовании Range.InsertParagraphAfter()
Здравствуйте, ребята, добрый день (время в Аргентине), я получил проект, в котором система форматирует текстовый документ в соответствии с некоторыми требованиями клиента. Документ Word, который я получаю, находится на.doc, а документ Word, который я экспортирую или создаю в другом формате или во внутреннем дизайне, -.docx. Суть в том, что этот код используется для работы со сборками Office12, но когда я добавил новые сборки Office15, произошел сбой.
Пример кода, который я использую для части проекта, где происходит сбой потока:
public void Prueba()
{
// Open word and a docx file
var wordApplication = new Application() { Visible = false };
string strPath=@"<Path>" ;
string strNombreArchivo = "<Name of the doc>.doc";
string strddd = "Foo.docx";
var docOriginal = wordApplication.Documents.Open(strPath+strNombreArchivo, ReadOnly: true);
//var docddd = wordApplication.Documents.Open(strPath + strddd, ReadOnly: false);
var docNuevo = wordApplication.Documents.Add(DocumentType: WdDocumentType.wdTypeDocument);
docOriginal.Content.Copy();
docNuevo.Content.Paste();
var docAUsar = docNuevo;
Range searchRange = docAUsar.Range();
searchRange.Find.ClearFormatting();
int nextSearchStart = searchRange.Start;
searchRange.Start = nextSearchStart;
Paragraph ParagraphParrafo = searchRange.Paragraphs.First;
nextSearchStart = ParagraphParrafo.Range.End;
String titleText = ParagraphParrafo.Range.Text;
try
{
// This is the point where the code crashes.
searchRange.InsertParagraphAfter();
docAUsar.Save();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
// Close word
wordApplication.Quit();
this.Close();
}
Сообщение об исключении:
System.Runtime.InteropServices.COMException was unhandled
HelpLink=wdmain11.chm#37373
HResult=-2146823683
Message=This method or property is not available because this command is not available for reading.
Source=Microsoft Word
ErrorCode=-2146823683
StackTrace:
en Microsoft.Office.Interop.Word.Range.InsertParagraphAfter()
en WindowsFormsApplication3.Form1.Prueba() en C:\Users\Dleekam\Google Drive\Proyectos\WindowsFormsApplication3\WindowsFormsApplication3\Form1.cs:línea 58
en WindowsFormsApplication3.Form1.Form1_Load(Object sender, EventArgs e) en C:\Users\Dleekam\Google Drive\Proyectos\WindowsFormsApplication3\WindowsFormsApplication3\Form1.cs:línea 25
en System.Windows.Forms.Form.OnLoad(EventArgs e)
en System.Windows.Forms.Form.OnCreateControl()
en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
en System.Windows.Forms.Control.CreateControl()
en System.Windows.Forms.Control.WmShowWindow(Message& m)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
en System.Windows.Forms.Form.WmShowWindow(Message& m)
en System.Windows.Forms.Form.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
InnerException:
Интересные вещи:
- когда я использую новый файл, он не падает.
- когда я пишу контент вручную, он не падает.
- когда я копирую и вставляю контент или часть контента, он падает.
- Я удаляю содержимое в новом документе и пробую снова, вылетает.
Я считаю, что это связано с форматированием слов или абзацев в оригинальном документе. Так как это происходит только тогда, когда я использую содержание оригинального документа. Но я еще не уверен, что происходит, или как справиться с этим, или как обойти это. Поскольку это исключение не является настолько описательным (я знаю, я не всегда собираюсь получать конкретную информацию или сообщение об ошибке, в котором я нуждаюсь), но у меня уже есть поиск в Интернете, чтобы выяснить, имел ли кто-то такой же, связанный или не связанный вид ошибки.
Любая помощь или ориентация будет и высоко ценится, спасибо всем за ваше время на чтение и понимание кода.
С наилучшими пожеланиями, Дуглас Ликам
1 ответ
Я работал над VS2010, но затем я пытался открыть и запустить этот раздел решения в VS2013, и я работал. Поэтому я должен предположить, что VS2013 распознает элементы в 15 версии офиса, и это не вызывает исключения.
Спасибо за чтение.