gpt4 book ai didi

c# - 代码仅将最后一个工作表转换为 csv

转载 作者:行者123 更新时间:2023-11-30 18:12:57 25 4
gpt4 key购买 nike

我用 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 中的脚本任务来执行此操作。所以这只是我运行的一个包含上述代码的脚本任务。

最佳答案

试图找出问题

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

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

此外,检查 Csv 是否已存在于目标路径中。

尝试使用类似的代码:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Visible = false;
excelApp.DisplayAlerts = false;

Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.Open(@"D:\Book1.xlsx");
workbook.DoNotPromptForConvert = true;
workbook.CheckCompatibility = false;

foreach (Microsoft.Office.Interop.Excel.Worksheet sht in workbook.Worksheets)
{
sht.Select();
System.Diagnostics.Debug.WriteLine(sht.Name.ToString());

if (System.IO.File.Exists(string.Format("{0}{1}.csv", @"D:\", sht.Name)))
{
System.IO.File.Delete(string.Format("{0}{1}.csv", @"D:\", sht.Name);

}

workbook.SaveAs(string.Format("{0}{1}.csv", @"D:\", sht.Name),
Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange);
}

//workbook.Close(false);
workbook.Close(false, Type.Missing, Type.Missing);
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

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

关于c# - 代码仅将最后一个工作表转换为 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com