Слово пытается восстановить - PullRequest
0 голосов
/ 17 августа 2010

В настоящее время мы обрабатываем документы с большими словами в программе c #. Во время обработки я получаю сообщение «Microsoft Windows перестала работать».

Программа считывает текстовый документ на основе комментариев, добавленных к документу, обрабатывает изображения и другой текст в документе, а также создает множество независимых текстовых документов с содержанием из исходного документа.

В чем причина проблемы? Это потому, что текстовые документы создаются, открываются и закрываются так часто?

Шаги программы: 1) Скопировать содержание, на которое ссылается комментарий в документе, в буфер обмена

    comment.Scope.CopyAsPicture();

2) Затем процесс преобразует содержимое в «html» или «обычное» изображение с помощью

    public String _GetContentFromClipboard()
    {
        String text = "";
        if (Clipboard.GetData(DataFormats.Html) != null)
        {
            text = Clipboard.GetData(DataFormats.Html).ToString();
        }
        else
        {
            IDataObject iData = Clipboard.GetDataObject();
            if (iData.GetDataPresent(DataFormats.Bitmap))
            {
                Image image = iData.GetData(DataFormats.Bitmap, true) as Image;
                String imageFile = Guid.NewGuid().ToString() + ".jpg";
                image.Save(imageFile, System.Drawing.Imaging.ImageFormat.Jpeg);
                text = "<img src=\"" + imageFile + "\" width=\"" + image.Width + "\" height=\"" + image.Height + "\" />";
            }
        }
        return text;
    }

3) Также иногда сохраняйте содержимое из буфера обмена в новый документ Word

    public String SaveClipboardContentToDoc(bool removeComments)
    {
        Object docName = GeneralUtil.GetTempFileWithoutExtension() + ".docx";
        Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();

        Microsoft.Office.Interop.Word.Document oDoc = new Microsoft.Office.Interop.Word.Document();

        oDoc = oWord.Documents.Add(ref missingObj, ref missingObj, ref missingObj, ref missingObj);
        oWord.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone;
        oWord.Visible = false;
        oDoc.ActiveWindow.Selection.Paste();
        if (removeComments == true)
        {
            foreach (Comment selectionComment in oDoc.Comments)
            {
                selectionComment.Delete();
            }
        }
        oDoc.SaveAs(ref docName, ref missingObj,
                    ref missingObj, ref missingObj, ref missingObj, ref missingObj, ref missingObj,
                    ref missingObj, ref missingObj, ref missingObj, ref missingObj, ref missingObj,
                    ref missingObj, ref missingObj, ref missingObj, ref missingObj);
        ((Microsoft.Office.Interop.Word._Document)oDoc).Close(ref missingObj, ref missingObj, ref missingObj);
        ((Microsoft.Office.Interop.Word._Application)oWord).Quit(ref missingObj, ref missingObj, ref missingObj);
        return docName.ToString();
    }

Начальное предупреждающее сообщение:

"Microsoft Windows has stopped working"
Windows can check online for a solution to the problem and try to recover your information.
Check online for a solution and close the program
close the program
Debug the program

Then clicking on debug leads to " "An unhandled win32 execption occurred in WINWORD.EXE [7372]"

1 Ответ

4 голосов
/ 17 августа 2010

Ну, твой код бомбит Word. Это не очень часто, но Word довольно большой зверь и, вероятно, содержит тысячи ошибок, которые еще не были найдены. Вы не получите никакой помощи от самого исключения, это происходит внутри основного кода. Даже если бы у вас был исходный код Word, у вас, вероятно, было бы чертовски много времени, чтобы выяснить, что именно пошло не так.

Word поддерживается, вы можете позвонить в службу поддержки Microsoft. После того, как вы пройдете внешние уровни поддержки, вы в конечном итоге назначите инженера службы поддержки, который хорошо знает Word и сможет определить причину. Чтобы пройти через эти внешние слои, очень важно иметь хорошее репро. Простейшая программа, которая может отключить этот сбой на любой машине. Как только вы это получили, подготовьте свою кредитную карту и позвоните им. Они дадут вам URL для загрузки вашего кода репро. Обязательно оставайтесь на связи с ними, так как ваше дело пересекает уровни поддержки, вам нужно быть активным, чтобы убедиться, что они остаются на деле. Рассчитывайте на несколько недель, если это нужно пройти до конца. Вы получите свои деньги обратно, если они определят, что это ошибка в Word вместо вашего кода.

Между прочим, работа над получением простого репро обычно является хорошим способом выяснить, что, если вообще, не так с вашим кодом. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...