Не могу найти правильный синтаксис для создания документа Word - PullRequest
0 голосов
/ 02 мая 2020

Я хочу создать базовое c консольное приложение, которое создает новый документ Word, добавляет к нему текст, а затем сохраняет его в файл. Сначала я пытался использовать пакет Docx nuget, но где-то читал, что это больше нельзя использовать бесплатно. Пытаясь использовать этот пакет, я получаю сообщение об ошибке «файл не найден» при попытке создать новый файл Docx с нуля, и я все еще получаю ту же ошибку при попытке использования приведенного ниже кода, используя Microsoft.Office.Interop.Word. Каждое обнаруженное мной онлайн-решение возвращает ту же ошибку, поэтому я не уверен, что моя проблема заключается в моих ссылках или, возможно, в общем доступе к файлам. Заранее благодарим за помощь.

Ошибка:

System.IO.FileNotFoundException: офис «Не удалось загрузить файл или сборку», версия = 15.0.0.0, культура = нейтральная, PublicKeyToken = 71e9bce111e9429 c». Системе не удается найти указанный файл. '

static void Main(string[] args)
    {

        Word.Application app = new Word.Application();

        Word.Document doc = app.Documents.Add();

        Word.Paragraph newParagraph;

        newParagraph = doc.Paragraphs.Add();
        newParagraph.Range.Text = "Document Creation Successful";

        doc.SaveAs2("test.docx");
        doc.Close();
        app.Quit();
    }

Файл проекта:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>Document_Generation</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="Microsoft.Office.Word.dll">
      <Guid>00020905-0000-0000-c000-000000000046</Guid>
      <VersionMajor>8</VersionMajor>
      <VersionMinor>7</VersionMinor>
      <WrapperTool>tlbimp</WrapperTool>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
    </COMReference>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="DocX" Version="1.6.0" />
  </ItemGroup>

</Project>

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Вы должны добавить два файла взаимодействия Office к ссылкам проекта:

  1. Базовое пространство имен Office представлено библиотекой Office.dll. Это библиотека объектов Microsoft Office, предоставляющая общие функции.
  2. Объектная модель Word, представленная библиотекой Microsoft.Office.Word.dll.
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>Document_Generation</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="Microsoft.Office.Word.dll">
      <Guid>00020905-0000-0000-c000-000000000046</Guid>
      <VersionMajor>8</VersionMajor>
      <VersionMinor>7</VersionMinor>
      <WrapperTool>tlbimp</WrapperTool>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
    </COMReference>

    <COMReference Include="office.dll">
      <Guid>2DF8D04C-5BFA-101B-BDE5-00AA0044DE52</Guid>
      <VersionMajor>2</VersionMajor>
      <VersionMinor>8</VersionMinor>
      <WrapperTool>tlbimp</WrapperTool>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
    </COMReference>
  </ItemGroup>

</Project>

В качестве примера вы можете попробовать создайте образец. Net каркасного консольного приложения и попробуйте добавить ссылку на COM в Word. Затем вы можете наблюдать добавление необходимых ссылок (где вы также можете получить необходимые файлы взаимодействия).

Подробнее о сборках Office Interop можно прочитать на странице Основные взаимодействия Office .

0 голосов
/ 02 мая 2020

Если вы делаете это в Visual Studio (что я бы порекомендовал), я бы сделал что-то вроде (измените каталог и текст, как вам нравится):

File.Create("C:/test.docx").Dispose();
File.AppendAllText("D:/test.docx", "test text");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...