首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.xlsm c#

使用.xlsm c#
EN

Stack Overflow用户
提问于 2018-07-09 19:06:31
回答 3查看 2.5K关注 0票数 0

我尝试使用Spire.Xls库,但它不支持.xlsm,并且当我将其转换为.xlsx时没有保存它,Microsoft.Office.Excel.Interop也是如此。

代码语言:javascript
复制
    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");
    }

Conver函数:

代码语言:javascript
复制
   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文件?请帮个忙,我真的很感激。

EN

回答 3

Stack Overflow用户

发布于 2018-07-09 19:41:42

EPPlus似乎是要使用的库。

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

他们有一个如何使用VBA宏的sample,但似乎你的问题只是读取和保存文件而不接触宏,所以你应该很好地使用他们的基本示例:

代码语言:javascript
复制
using (ExcelPackage package = new ExcelPackage(newFile))
{
    // make your modifications

    package.Save();
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-09 20:23:50

我个人使用ClosedXML。

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

你可以找到more details here.

票数 0
EN

Stack Overflow用户

发布于 2018-07-10 18:00:54

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

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51244085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档