【发布时间】:2019-06-21 17:12:40
【问题描述】:
我用 C# 编写了一个程序,该程序应该将我的 excel 工作簿中的每个工作表转换为 csv 并将其保存在自己的文件中。我遇到的问题是,当我打开每个文件时,它们都具有与最后一个工作表相同的内容。这是我的代码:
public void Main()
{
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Open(@"C:\Users\user\Desktop\Book1.xlsx");
foreach (Excel.Worksheet sht in workbook.Worksheets)
{
sht.Select();
System.Diagnostics.Debug.WriteLine(sht.Name.ToString());
workbook.SaveAs(string.Format("{0}{1}.csv", @"C:\Users\user\Desktop\", sht.Name), Excel.XlFileFormat.xlCSV, Excel.XlSaveAsAccessMode.xlNoChange);
}
workbook.Close(false);
Dts.TaskResult = (int)ScriptResults.Success;
}
任何帮助都会很棒,谢谢!
更新 1
我不知道是否值得一提,我正在尝试通过 SSIS 中的脚本任务来执行此操作。所以这只是我运行的一个包含上述代码的脚本任务。
【问题讨论】:
-
否 @jdweng - OP 正在保存
workbook而不是worksheet。将workbook保存为 CSV 将默认为仅保存工作表本身。在这种情况下,最后一张。将您的worksheet保存为 CSV。此行:workbook.SaveAs是您的问题。 -
@MosheKatz - 是的,名称是迭代的。内容不是。
-
调试行是否显示所有工作表名称?工作表和工作表之间存在差异。工作表有许多不同的类型,一种是工作表。所以试试 :Excel.Worksheet sht in workbook.Sheets
-
而不是使用 workbook.SaveAs 尝试 sht.SaveAs.
-
@jdweng 我尝试了这两个建议。它的行为似乎仍然相同,并给我相同的输出
标签: c# excel csv ssis script-task