Как объявить рабочий лист, используя задачу скрипта?
Я пытаюсь объявить 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;
Для получения дополнительной информации перейдите по следующим ссылкам:
- Прочитайте файл Excel в C#
- Чтение данных из Excel 2010 с использованием Microsoft.Office.Interop.Excel
- Взаимодействие с Excel: _Worksheet или Worksheet?
(б) Interop Library версия
Убедитесь, что используемая DLL-библиотека Office.Interop соответствует установленной на компьютере версии officeversion.
(c) Проблемы с разрешениями и защитой
Убедитесь, что книга не доступна только для чтения или защищена, вы можете обратиться к следующему вопросу SO:
(d) Проблема скрытых рабочих листов
Также убедитесь, что рабочая книга не содержит скрытых или временных рабочих таблиц, попробуйте перебрать все рабочие таблицы в рабочей книге и отладить код, чтобы увидеть, что происходит.
(2) Добавить новый лист
Если вы хотите добавить новый лист в существующую книгу, вы можете:
(а) Добавить его через Script-Task
Вы можете использовать похожий код:
Excel._Worksheet newWorksheet;
newWorksheet = (Excel._Worksheet)ThisWorkbook.Worksheets.Add();
Для получения дополнительной информации вы можете проверить следующие ссылки:
- Как: программно добавлять новые рабочие листы в рабочие книги
- Как создать новый лист в файле Excel C#?
(б) Использовать задачу "Выполнить 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