工作表.SaveAs方法保存所有工作表

本文关键字:工作 方法 SaveAs 保存 | 更新日期: 2023-09-27 18:20:42

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

我正在使用MSDN上描述的Worksheet.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方法保存所有工作表

正如Tim Williams在我点击上面"我爱我的猴子"发布的链接后发现的评论中所说:

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

不知道你为什么不能。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,但也将选项卡放在了底部,我希望避免这样做,因为现在只有一个选项卡。它确实满足了我的最低需求,尽管我想知道如何让它更整洁一点。