C# Worksheet.SaveAs方法保存所有工作表

C# Worksheet.SaveAs方法保存所有工作表,c#,excel,C#,Excel,使用C#编写一个方法,从工作簿中取出一个工作表并将其保存为HTML 我正在使用中所述的sheet.SaveAs方法 但是,当我查看输出时,它已经消失并保存了工作簿中的所有工作表,而不仅仅是我选择的工作表。这就好像Worksheet.SaveAs和Workbook.SaveAs只是做同样的事情 简化代码: public static void saveSingleSheetAsHTML(string workbook, string destination, string sheetName) {

使用C#编写一个方法,从工作簿中取出一个工作表并将其保存为HTML

我正在使用中所述的sheet.SaveAs方法

但是,当我查看输出时,它已经消失并保存了工作簿中的所有工作表,而不仅仅是我选择的工作表。这就好像Worksheet.SaveAs和Workbook.SaveAs只是做同样的事情

简化代码:

public static void saveSingleSheetAsHTML(string workbook, string destination, string sheetName)
{
    Application excel = new Application();
    excel.Workbooks.Open(Filename: workbook);
    Microsoft.Office.Interop.Excel._Worksheet worksheet = excel.Worksheets[sheetName];
    var format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
    worksheet.SaveAs(destination, format);
}
现在,当我打开生成的HTML文件时,它只输出了整个工作簿,而不是工作表。

正如我在点击上面发布的链接后发现的评论中所说:

“不能在工作表上调用SaveAs-第一次调用。复制以创建工作表。” 仅包含该工作表的独立新工作簿,然后保存该工作表 工作簿。”

不知道你为什么不能。MSDN上的文档没有给出任何关于这方面的线索,并建议这应该是可能的

因此,在创建了新工作簿之后:

var newbook = excel.Workbooks.Add(1);
复制图纸,将其作为第一张图纸放置:

excelWorksheet.Copy(newbook.Sheets[1]);
然后删除默认的“Sheet1”,它将始终是第二张图纸:

newbook.Worksheets[2].Delete();
然后调用SaveAs方法,然后关闭新书:

newbook.SaveAs(Filename: destination, FileFormat: format);
newbook.Close();

这确实将新工作簿保存为HTML,但也将选项卡放在底部,我希望避免这样做,因为现在只有一个选项卡。它确实满足了我的最低要求,不过我想知道如何使它更整洁。

我认为按照本文的思路应该会有所帮助:基本上是将工作表复制到新工作簿中,然后从新工作簿中保存它