work with .xlsm c#



我试着使用Spire。Xls库,但它不支持.xlsm,当我将其转换为.xlsx时,它还没有保存,与Microsoft相同。办公室擅长Interop。

private void button1_Click(object sender, EventArgs e)
{
//string xlsm = @"D:foot_Regular B07BNJ56GV B07BNK8S3Q B07BMX2NN4 with3.xlsm";
string xlsx = @"D:foot_Regular B07BNJ56GV B07BNK8S3Q B07BMX2NN4 with3.xlsx";
//ConverXlsmToXlsx(xlsm, xlsx);
//string xlsx = @"D:1.xlsx";
/* Load Excel File */
Excel.Application excelApp = new Excel.Application();
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(xlsx, 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(@"D:out_file.xlsx");
excelWorkbook.Close(false);
excelApp.Application.Quit();
/* Release COM objects otherwise Excel remain running */
releaseObject(range);
releaseObject(excelWorkbook);
releaseObject(excelWorksheet);
releaseObject(excelApp);
MessageBox.Show("Finished");
}

转换器功能:

public static void ConverXlsmToXlsx(string path, string outputPath)
{
byte[] byteArray = File.ReadAllBytes(path);
using (MemoryStream stream = new MemoryStream())
{
stream.Write(byteArray, 0, (int)byteArray.Length);
using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true))
{
// Change from template type to workbook type
spreadsheetDoc.ChangeDocumentType(SpreadsheetDocumentType.Workbook);
}
File.WriteAllBytes(outputPath, stream.ToArray());
}
}

如何通过C#轻松处理.xlsm文件?请帮忙,我真的很感激。

EPPlus似乎是要使用的库。

您不需要Interop或实际安装MS Excel。

他们有一个如何使用VBA宏的示例,但你的问题似乎只是在不接触宏的情况下读取和保存文件,所以你应该擅长他们的基本示例:

using (ExcelPackage package = new ExcelPackage(newFile))
{
// make your modifications
package.Save();
}

我个人使用ClosedXML。

ClosedXML使开发人员更容易创建Excel 2007+(.xlsx、.xlsm等(文件。它提供了一种很好的面向对象的方法来操作文件(类似于VBA(,而不必处理XML文档的麻烦。任何人都可以使用它。NET语言,如C#和VisualBasic。NET。

您可以在此处找到更多详细信息。

Spire。XLS支持.xlsm文件,下面是直接从xlsm文件中删除行的代码:

Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xlsm");
Worksheet sheet = workbook.Worksheets[0];
sheet.DeleteRow(1,87);
workbook.SaveToFile("Output.xlsm", ExcelVersion.Version2007);

我使用Spire。XLS Pack(修补程序(版本:8.6.6

最新更新