使用Interop C#保存Excel电子表格

static void Main() { Application excelapp = new Application(); Workbook book = excelapp.Workbooks.Open(@"C:\HWYFAB.xlsx", 0, false, 5, "", "", false, XlPlatform.xlWindows , "", true, false, 0, true, false, false); Worksheet sheet = (Worksheet)book.Sheets[1]; Range cell = (Range)sheet.Cells[3, 2]; Console.WriteLine(cell.Text); cell.ClearContents(); book.Close(true, "HWYFAB.xlsx", false); excelapp.Quit(); } 

该程序按预期运行并退出。 它将单元格B3中的正确值打印到控制台。 closures时询问是否要replace现有的文件。 我点击是。 当我在Excel中打开电子表格时,尽pipe有cell.ClearContents(),但值仍位于单元格B3中。

有什么想法吗?

您调用cell.ClearContents()将清除单元格中的公式和值常量。 这应该绝对有效。 你可以在你调用cell.Value2 == null cell.ClearContents()通过testingcell.Value2 == null来证实这一点,它应该是true

我相信你的代码的问题是在调用book.Close(true, "HWYFAB.xlsx", false) 。 问题是你明确地传递了你的工作簿的名字,但是你正在离开这个path。 (请注意,当您打开工作簿时,您将包括完整path,包括“C:\”目录。)通过在保存时closures工作簿的完整path,您将保存到当前目录,该目录可能是“我的文档“或其他任何地方。

如果您希望将工作簿保存在其原始位置,则应传入Type.Missing作为Filename参数。 例如:

 book.Close(true, Type.Missing, false); 

这个想法是未经testing的,但我相当确信这应该适合你。 试一试…

迈克