保存 excel 工作簿 C#
Saving an excel workbook C#
我正忙于使用 C# 应用程序处理 excel 数据的应用程序。
xlApp = new Excel.Application();
xlWorkbook = xlApp.Workbooks.Open(ConString, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);
到目前为止,我只是通过简单地说 "xlApp.Quit" 这将调出标准的 "Would you like to save your changes" 对话框来保存工作簿,您可以从任何 Microsoft Office 产品获得该对话框。
但是我在保存工作簿数据时遇到问题,所以我被告知使用 Workbook.Save 方法。它现在保存了正确的数据,但我无法指定 filename/location。
我了解了 .SaveCopyAs 方法,我正在使用保存文件对话框来提供 filename/location,但是当我按下保存并关闭应用程序时,找不到文件。
这是保存文件方法。
private void SaveFile()
{
using (SaveFileDialog Save = new SaveFileDialog())
{
Save.Filter = "Excel Files (*.xlsx)|*.xlsx";
Save.InitialDirectory = "C:";
Save.Title = "Save";
if (Save.ShowDialog() == DialogResult.OK)
{
// Using .SaveCopyAs doesnt save at all
xlWorkbook.SaveCopyAs(saveFileDialog1.FileName);
xlWorkbook.Saved = true;
//Using .Save saves the file, but i cannot specify the location/File name
//xlWorkbook.Save();
xlApp.Quit();
ReleaseObject(xlWorksheet);
ReleaseObject(xlWorkbook);
ReleaseObject(xlApp);
}
}
}
不确定这是否相关,但这是我的 ReleaseObject 方法。
private void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch(Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
我看到很多人说他们的 SaveCopyAs 方法也没有保存,这是因为他们没有给文件一个 name/extension。这是我检查的第一件事。这个互操作的东西对我来说是新的,所以请原谅任何错误。
谢谢
尝试xlWorkbook.SaveAs("TheSavePath") instead of
xlWorkbook.SaveCopyAs`。
覆盖使用:
xlWorkbook.SaveAs("TheSavePath", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
我正忙于使用 C# 应用程序处理 excel 数据的应用程序。
xlApp = new Excel.Application();
xlWorkbook = xlApp.Workbooks.Open(ConString, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);
到目前为止,我只是通过简单地说 "xlApp.Quit" 这将调出标准的 "Would you like to save your changes" 对话框来保存工作簿,您可以从任何 Microsoft Office 产品获得该对话框。
但是我在保存工作簿数据时遇到问题,所以我被告知使用 Workbook.Save 方法。它现在保存了正确的数据,但我无法指定 filename/location。
我了解了 .SaveCopyAs 方法,我正在使用保存文件对话框来提供 filename/location,但是当我按下保存并关闭应用程序时,找不到文件。
这是保存文件方法。
private void SaveFile()
{
using (SaveFileDialog Save = new SaveFileDialog())
{
Save.Filter = "Excel Files (*.xlsx)|*.xlsx";
Save.InitialDirectory = "C:";
Save.Title = "Save";
if (Save.ShowDialog() == DialogResult.OK)
{
// Using .SaveCopyAs doesnt save at all
xlWorkbook.SaveCopyAs(saveFileDialog1.FileName);
xlWorkbook.Saved = true;
//Using .Save saves the file, but i cannot specify the location/File name
//xlWorkbook.Save();
xlApp.Quit();
ReleaseObject(xlWorksheet);
ReleaseObject(xlWorkbook);
ReleaseObject(xlApp);
}
}
}
不确定这是否相关,但这是我的 ReleaseObject 方法。
private void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch(Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
我看到很多人说他们的 SaveCopyAs 方法也没有保存,这是因为他们没有给文件一个 name/extension。这是我检查的第一件事。这个互操作的东西对我来说是新的,所以请原谅任何错误。
谢谢
尝试xlWorkbook.SaveAs("TheSavePath") instead of
xlWorkbook.SaveCopyAs`。
覆盖使用:
xlWorkbook.SaveAs("TheSavePath", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);