Запись значений в ячейки Excel с использованием C # - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть простой метод C #, написанный на Visual Studio Code, который должен создать новую книгу Excel, записать значение в ячейку на листе и затем сохранить файл.

using System;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;

namespace Test
{
    class ExcelTest
    {
        public void TestMethod()
        {
            String outputPath = "C:\\Test.xlsx";

            Excel.Application excel = new Excel.Application();
            Excel.Workbook workbook = excel.Workbooks.Add(Type.Missing);
            Excel.Worksheet sheet = (Excel.Worksheet)workbook.ActiveSheet;

            ((Excel.Range)sheet.Cells[1,1]).Value = "Hello";

            workbook.SaveAs(outputPath);
            workbook.Close();
            excel.Quit();
        }
    }
}

При вызове этого метода выполнение кода останавливается на листе ((Excel.Range). Cell [1,1]). Value = "Hello"; строка со следующим исключением:

Исключительная ситуация: CLR / System.NullReferenceException Произошло необработанное исключение типа «System.NullReferenceException»: «Ссылка на объект не установлена ​​для экземпляра объекта.»

Кажется, что метод взаимодействует с Excel, заменяя строку на 'sheet.Name = "Test";' в результате файл будет сохранен, а рабочая тетрадь содержит один лист с именем «Тест».

Для справки: я использую код Visual Studio и на моем компьютере установлен Excel 2016, а файл .csproj имеет следующие ссылки:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Office.Interop.Excel" Version="*"/>
  </ItemGroup>
</Project>

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Для справки я исправил это, перестроив приложение как приложение .NET Framework, а не приложение .NET Core. После этого работала функция взаимодействия COM.

0 голосов
/ 27 апреля 2018

Вы пробовали так же, как:

sheet.Cells[1,1].Value = "Hello";

Я не думаю, что его нужно приводить как объект диапазона для установки значения.

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