Как объявить рабочий лист, используя задачу скрипта?

Я пытаюсь объявить Worksheet для обработки ячеек файла.xlsx, но мой сценарий C# завершается неудачно, когда я объявляю объект Worksheet:

Microsoft.Office.Interop.Excel.Application xlApp = new 
Microsoft.Office.Interop.Excel.Application();

Workbook excelBook = xlApp.Workbooks.Open(fileFullPath);

MySheet = (Excel.Worksheet)excelBook.Worksheets[Data_Sheet];

Я пробовал все это заявления:

MySheet workSheet = (Worksheet)excelBook.Application.Sheets[1];  
MySheet = (Excel.Worksheet)excelBook.Worksheets[1];

Четное

Worksheet MySheet = new Worksheet();
MySheet = excelBook.Worksheets[Data_Sheet];

Я использую этот код в задаче сценария в пакете служб SSIS, и он не показывает мне сообщение об ошибке, у меня есть только окно ошибки, сообщающее, что содержащиеся в нем сценарии имеют ошибку компиляции.

Спасибо за помощь.

2 ответа

Решение

Я действительно не понял, хотите ли вы добавить новый лист или просто отредактировать текущий. Я дам несколько предложений для обоих случаев:

(1) Редактировать существующий лист

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

(а) Использование _Worksheet вместо Worksheet

Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];

Как пример:

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"file.xlsx");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

Для получения дополнительной информации перейдите по следующим ссылкам:

(б) Interop Library версия

Убедитесь, что используемая DLL-библиотека Office.Interop соответствует установленной на компьютере версии officeversion.

(c) Проблемы с разрешениями и защитой

Убедитесь, что книга не доступна только для чтения или защищена, вы можете обратиться к следующему вопросу SO:

(d) Проблема скрытых рабочих листов

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


(2) Добавить новый лист

Если вы хотите добавить новый лист в существующую книгу, вы можете:

(а) Добавить его через Script-Task

Вы можете использовать похожий код:

Excel._Worksheet newWorksheet;
newWorksheet = (Excel._Worksheet)ThisWorkbook.Worksheets.Add();

Для получения дополнительной информации вы можете проверить следующие ссылки:

(б) Использовать задачу "Выполнить SQL"

Сначала вы должны создать Excel Connection Manager Затем добавьте задачу "Выполнение SQL", выберите "Подключение к Excel" и напишите CREATE Заявление, как пример:

CREATE TABLE
`Excel Destination` (

    `PromotionKey` INTEGER,
    `PromotionAlternateKey` INTEGER,
    `EnglishPromotionName` NVARCHAR(255),
    `SpanishPromotionName` NVARCHAR(255),
    `FrenchPromotionName` NVARCHAR(255),
    `DiscountPct` DOUBLE PRECISION,
    `EnglishPromotionType` NVARCHAR(50),
    `SpanishPromotionType` NVARCHAR(50),
    `FrenchPromotionType` NVARCHAR(50),
    `EnglishPromotionCategory` NVARCHAR(50),
    `SpanishPromotionCategory` NVARCHAR(50),
    `FrenchPromotionCategory` NVARCHAR(50),
    `StartDate` DATETIME,
    `EndDate` DATETIME,
    `MinQty` INTEGER,
    `MaxQty` INTEGER

)

Для получения дополнительной информации вы можете проверить следующие ссылки:

Интерфейс Office Interop / Object Model API основан на запуске кода Office в контексте вашего приложения. Предполагается, что он будет запущен в потоке пользовательского интерфейса интерактивного (т.е. не серверного) приложения.

См. Рекомендации по автоматизации Office на стороне сервера.

Если у вас когда-нибудь получится, это сработает, это потерпит неудачу в самое неудобное время.

Если вам нужно манипулировать документами Office на сервере, используйте соответствующий API на стороне сервера, такой как OpenXML

Другие вопросы по тегам