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

时间:2010-04-22 17:37:33

标签: c# excel interop

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中的正确值打印到控制台。关闭它时询问我是否要替换现有文件。我点击是。当我在Excel中打开电子表格时,尽管有cell.ClearContents(),该值仍然在单元格B3中。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您对cell.ClearContents()的调用将清除单元格中的公式和值常量。这应该绝对有效。您可以在致电cell.ClearContents()之后通过测试cell.Value2 == null来确认这一点,true应为book.Close(true, "HWYFAB.xlsx", false)

我认为代码的问题在于对Type.Missing的调用。问题是你明确地传递了工作簿的名称,但是你离开了这条路。 (请注意,当您打开工作簿时,您将包括完整路径,包括“C:\”目录。)通过在保存时离开工作簿的完整路径,您将保存到当前目录,这可能是“我的文件“或其他任何地方。

如果您希望将工作簿保存在其原始位置,那么您应该将Filename传递给book.Close(true, Type.Missing, false); 参数。例如:

{{1}}

这个想法未经测试,但我相信这对你有用。试一试......

- 迈克