仅将最后一个工作表转换为CSV的代码

时间:2019-01-28 16:34:07

标签: c# excel csv ssis script-task

我用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中的脚本任务来执行此操作是否值得一提。因此,我运行的只是一个脚本任务,其中包含上面的代码。

1 个答案:

答案 0 :(得分:0)

试图找出问题所在

在正常情况下,您提供的代码可以正常运行。如果excel应用程序显示了一个消息框,需要权限才能启用编辑,可能会遇到一些问题,因为其他工作表受到保护,因此存在访问其他工作表的权限问题。

首先,手动打开excel并检查您是否可以访问所有工作表并手动执行保存操作。如果您没有遇到任何问题,则应避免在使用Interop.Excel库时excel显示消息框或其他促销。

此外,检查目标路径中尚不存在Csv。

尝试使用类似的代码:

viewModel = ViewModelProviders.of(activity!!).get(SharedViewModel::class.java)

我测试了以下代码,并成功转换了所有工作表。