如何使用脚本任务声明工作表?
How to declare a Worksheet using a Script Task?
我试图声明一个 Worksheet 来处理 .xlsx 文件的单元格,但是当我声明 Worksheet 对象时我的 C# 脚本失败了:
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 包中的脚本任务中使用此代码,它没有向我显示错误消息,我只有错误 window 告诉我包含的脚本有错误编译。
感谢您的帮助。
Office 互操作/对象模型 API 基于应用程序上下文中的 运行 Office 代码。它期望在交互式(即非服务器)应用程序的 UI 线程上是 运行。
见Considerations for server-side Automation of Office
如果你真的让这个工作,它会在最不方便的时候失败。
如果您需要在服务器上操作 Office 文档,请使用合适的服务器端 API,例如 OpenXML
我真的不明白您是要添加新工作表还是只编辑当前工作表。我会针对这两种情况给出一些建议:
(1) 编辑现有工作表
如果您要编辑现有工作表,请尝试以下操作之一:
(a) 使用 _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;
有关更多信息,请查看以下链接:
- Read Excel File in C#
- Reading data from excel 2010 using Microsoft.Office.Interop.Excel
- Excel interop: _Worksheet or Worksheet?
(b) 互操作库版本
检查您使用的 Office.Interop DLL 是否与计算机上安装的 office 版本相关。
(c) 权限和保护问题
检查工作簿是否为ReadOnly或者被保护,可以参考下面的SO问题:
(d) 隐藏工作表问题
还要确保工作簿不包含隐藏或临时工作表,尝试遍历工作簿中的所有工作表并调试代码以查看发生了什么。
(2) 添加新工作表
如果您要向现有工作簿添加新工作表,您可以:
(a) 通过脚本任务添加
您可以使用类似的代码:
Excel._Worksheet newWorksheet;
newWorksheet = (Excel._Worksheet)ThisWorkbook.Worksheets.Add();
更多信息,您可以查看以下链接:
- How to: Programmatically add new worksheets to workbooks
- How to create a new worksheet in Excel file c#?
(b) 使用执行 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
)
更多信息,您可以查看以下链接:
我试图声明一个 Worksheet 来处理 .xlsx 文件的单元格,但是当我声明 Worksheet 对象时我的 C# 脚本失败了:
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 包中的脚本任务中使用此代码,它没有向我显示错误消息,我只有错误 window 告诉我包含的脚本有错误编译。
感谢您的帮助。
Office 互操作/对象模型 API 基于应用程序上下文中的 运行 Office 代码。它期望在交互式(即非服务器)应用程序的 UI 线程上是 运行。
见Considerations for server-side Automation of Office
如果你真的让这个工作,它会在最不方便的时候失败。
如果您需要在服务器上操作 Office 文档,请使用合适的服务器端 API,例如 OpenXML
我真的不明白您是要添加新工作表还是只编辑当前工作表。我会针对这两种情况给出一些建议:
(1) 编辑现有工作表
如果您要编辑现有工作表,请尝试以下操作之一:
(a) 使用 _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;
有关更多信息,请查看以下链接:
- Read Excel File in C#
- Reading data from excel 2010 using Microsoft.Office.Interop.Excel
- Excel interop: _Worksheet or Worksheet?
(b) 互操作库版本
检查您使用的 Office.Interop DLL 是否与计算机上安装的 office 版本相关。
(c) 权限和保护问题
检查工作簿是否为ReadOnly或者被保护,可以参考下面的SO问题:
(d) 隐藏工作表问题
还要确保工作簿不包含隐藏或临时工作表,尝试遍历工作簿中的所有工作表并调试代码以查看发生了什么。
(2) 添加新工作表
如果您要向现有工作簿添加新工作表,您可以:
(a) 通过脚本任务添加
您可以使用类似的代码:
Excel._Worksheet newWorksheet;
newWorksheet = (Excel._Worksheet)ThisWorkbook.Worksheets.Add();
更多信息,您可以查看以下链接:
- How to: Programmatically add new worksheets to workbooks
- How to create a new worksheet in Excel file c#?
(b) 使用执行 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
)
更多信息,您可以查看以下链接: