C# 将excel xlsm保存到xls

C# 将excel xlsm保存到xls,c#,node.js,excel,vba,C#,Node.js,Excel,Vba,我需要将JSON数据导出到节点JS中的XLS预定义模板。我没有找到将数据导出到XLS的好方法。因此,我首先使用CloseXML库将JSON数据导出到XLSM模板。(从Nodejs调用C#console应用程序(exe)来完成此操作)。它起作用了!现在我想把这个XLSM文档转换成XLS 我在我的C#控制台应用程序中尝试了如下office API将XLSM“另存为”到XLS。但它不起作用。给出运行时错误 Excel.Application application = new Excel.Applic

我需要将JSON数据导出到节点JS中的XLS预定义模板。我没有找到将数据导出到XLS的好方法。因此,我首先使用CloseXML库将JSON数据导出到XLSM模板。(从Nodejs调用C#console应用程序(exe)来完成此操作)。它起作用了!现在我想把这个XLSM文档转换成XLS

我在我的C#控制台应用程序中尝试了如下office API将XLSM“另存为”到XLS。但它不起作用。给出运行时错误

Excel.Application application = new Excel.Application();
Excel.Workbook wb = application.Workbooks.Add("C:\\Temp\\Template1.xlsm");
wb.SaveAs("Igloo_Bulk_Import_Template1.xls",Excel.XlFileFormat.xlExcel8)
有什么建议吗


如果不是office API,那么实现XLSM->XLS的任何其他更好的方法。

下面是最终的代码,可以使用!谢谢@Tim Williams

        var excelApplication = new Excel.Application();
        var workbooks = excelApplication.Workbooks;
        var workbook = workbooks.Open("C:\\Temp\\Book1.xlsm"); // Fixed
        workbook.SaveAs("C:\\Temp\\test1.xls", Excel.XlFileFormat.xlExcel8);

        workbook.Close();
        workbooks.Close();
        excelApplication.Quit();

        Marshal.ReleaseComObject(workbook);
        Marshal.ReleaseComObject(workbooks);
        Marshal.ReleaseComObject(excelApplication);

你是说xlsx吗?xls已经死了十年了。另存为xls(x)将删除宏。这通常伴随着一个警告。可能需要抑制该警告(displayalerts=false或类似)。发布完整的异常信息。我实际上想得到XLS。我很清楚这是一种旧格式。但客户端希望XLS格式在遗留工具中导入它。为了实现这一点,首先我将JSON数据导出到XLSM模板,然后再转换回XLS。您可能不知道XLS文件中可能包含VBA项目。。其中包含表单、按钮等。。在新版本的XLSM中也可以实现同样的效果。。仅供参考,如果打开XLSM,可以另存为XLS。。现在请你取消对这个问题的反对票。我认为你对excel编程的了解有限,我不是最悲观的人。您编写了一个运行时错误,但没有包含关于该错误的任何进一步信息(号码、消息、调用堆栈)。一旦你这么做了,人们可以做的不仅仅是猜测发生了什么。关于替代方案,您可以使用中的信息从xlsm转到xlsx,然后在第二步中进一步转到xls。是否希望
Excel.Workbook wb=application.Workbooks.Open(“C:\\Temp\\Template1.xlsm”)
?此外,您可能希望在执行SaveAs时使用完整路径,因为您不能总是依赖于当前目录是您想要的。谢谢@TimWilliams的建议。我能够将“另存为”XLSM作为XLS文件。我给出了目标文件的完整路径,它成功了。