gpt4 book ai didi

c# - 如何通过 C# .NET 使用 .xlsm?

转载 作者:行者123 更新时间:2023-11-30 16:58:35 27 4
gpt4 key购买 nike

我有 C# 应用程序,用于从 excel 中删除前几行,然后将文件格式化为 .csv,但现在我得到的不是 .xlsx,而是 .xlsm,我找不到如何使用,我什至无法从列加载数据。它是来自 SAP 的一些报告文件,我在里面找不到任何宏。我试过这样的事情

        /* Load Excel File */
Excel.Application excelApp = new Excel.Application();
string workbookPath = @"file.xlsm";
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

/* Load worksheets collection */
Excel.Sheets excelSheets = excelWorkbook.Worksheets;

/* Select first worksheet */
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets[1];

/* Deleting first 87 Rows */
Excel.Range range = excelWorksheet.get_Range("1:87").EntireRow;
range.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);

/* Save File */
excelWorkbook.SaveAs(@"out_file.xlsm");
excelWorkbook.Close(false);
excelApp.Application.Quit();

/* Release COM objects otherwise Excel remain running */
releaseObject(range);
releaseObject(excelWorkbook);
releaseObject(excelWorksheet);
releaseObject(excelApp);

这适用于 .xlsx 扩展名(它将删除行并以另一个名称保存)但不适用于 .xlsm(程序成功运行但不删除数据)。即使我手动将 excel 文件保存为 .xlsx 并在该文件上运行程序它也不起作用,但如果我手动将粘贴数据复制到另一个 .xlsx 并在该文件上运行程序它工作,我不明白。我如何重写此程序以从 .xlsm 文件中删除行?请帮忙,谢谢。

最佳答案

感谢 Christian Sauer,EPPLUS.dll 成功了。

第一步

Solution Explorer > Project Name > Add > Reference > Browse to EPPLUS.dll

第二步

using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.IO;

第三步(删除行范围)

 using (var p = new ExcelPackage(new FileInfo(@"file.xlsm")))
{
var sheet = p.Workbook.Worksheets["Sheet1"];
sheet.DeleteRow(1, 87);
p.SaveAs(new FileInfo(@"output.xlsm"));
}
)

第 4 步(将 .xlsm 导出为 .csv)

在这些行之间插入代码

                sheet.DeleteRow(1, 87);
====>[HERE]
p.SaveAs(new FileInfo(@"output.xlsm"));

/* Code placed to [HERE] placeholder */
using (var writer = File.CreateText(@"output.csv"))
{
var rowCount = sheet.Dimension.End.Row;
var columnCount = sheet.Dimension.End.Column;
for (var r = 1; r <= rowCount; r++)
{
for (var c = 1; c <= columnCount; c++)
{
writer.Write(sheet.Cells[r, c].Value);
writer.Write(";");
}
writer.WriteLine();
}
}

关于c# - 如何通过 C# .NET 使用 .xlsm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132183/

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