【问题标题】:work with .xlsm c#使用 .xlsm c#
【发布时间】:2018-07-10 18:00:54
【问题描述】:

我尝试使用 Spire.Xls 库,但它不支持 .xlsm,当我将其转换为 .xlsx 时并没有保存它,与 Microsoft.Office.Excel.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 文件? 请帮忙,我将不胜感激。

【问题讨论】:

    标签: c# excel xlsm


    【解决方案1】:

    EPPlus 似乎是要使用的库。

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

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

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

    【讨论】:

      【解决方案2】:

      我个人使用 ClosedXML。

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

      你可以找到more details here.

      【讨论】:

      • 字符串路径 = @"D:\foot_Regular3.xlsm"; var workbook = new XLWorkbook(path);在 mscorlib.dll 中抛出“System.TypeLoadException”
      • 这可能是几件事。你可以查看这个答案here
      【解决方案3】:

      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(Hotfix) Version:8.6.6

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多