Невозможно сохранить файл .docx после изменений - PullRequest
1 голос
/ 30 сентября 2019

Я создаю программное обеспечение для изменения файлов DOCX, используя Microsoft.Interop.Word. Пользователи могут добавлять текст, таблицы и т. Д.

При попытке сохранить как документ я получаю сообщение об ошибке COM или Cast в зависимости от кода, который я пытаюсь использовать.

Если япопробуйте закрыть документ перед сохранением, я получаю следующую ошибку:

System.InvalidCastException: «Невозможно преобразовать COM-объект типа« Microsoft.Office.Interop.Word.DocumentClass »в тип интерфейса». Microsoft.Office.Interop.Word._Document. Эта операция завершилась неудачно, поскольку вызов QueryInterface в компоненте COM для интерфейса с IID '{0002096B-0000-0000-C000-000000000046}' не выполнен из-за следующей ошибки: Запрошенный объект не существует. (Исключение из HRESULT: 0x80010114). '

Если я не закрываю документ, я получаю следующую ошибку:

System.Runtime.InteropServices.COMException:' Wordне могу сохранить этот файл, потому что он уже открыт в другом месте.

Это моя простая функция сохранения:

private Microsoft.Office.Interop.Word.Application _appClass = null;
private Document _doc = null;
private object READONLY = (object)false;
public object M = System.Reflection.Missing.Value;

public DocBrowser()
{
    _appClass = new Microsoft.Office.Interop.Word.Application();
    _doc = _appClass.Documents.Open(ref oldFileName, ref M, ref READONLY,
                                  ref M, ref M, ref M, ref M, ref M, ref M, ref M,
                                  ref M, ref M, ref M, ref M, ref M, ref M);
    InsertText("test text");
    SaveDocx("temp.docx");
}

public void InsertText(string text)
{
    Paragraph oPara;
    object oStyleName = "Normal";
    oPara = _doc.Content.Paragraphs.Add(ref M);
    oPara.Range.Text = text;
    oPara.Range.set_Style(ref oStyleName);
    oPara.Range.InsertParagraphAfter();

    oPara = null;
    oStyleName = null;
}

public void SaveDocx(string newDocPath)
{
    object newFileName = (object)newDocPath;
    object fileType = (object)WdSaveFormat.wdFormatDocumentDefault;

    // Trying to close document first 

    /*if (_doc != null)
    {
        _doc.Close(WdSaveOptions.wdDoNotSaveChanges);
    }*/

    _doc.SaveAs(ref newFileName, ref fileType,
        ref M, ref M, ref M, ref M, ref M, ref M, ref M,
        ref M, ref M, ref M, ref M, ref M, ref M, ref M);
}

Мне действительно не удается сохранить файл, я также пыталсябезуспешно сохранить как файл PDF.

1 Ответ

0 голосов
/ 01 октября 2019

Оказывается, вы не можете сохранить SaveAs для существующего файла, просто удалив файл, если он существует, а затем SaveAs заставил все работать, все еще странное поведение.

...