保存Excel工作簿C#

时间:2017-01-28 09:49:54

标签: c# excel save interop savefiledialog

我忙于使用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"来保存了工作簿。这会带来标准,"你想保存你的更改"您从任何Microsoft Office产品获得的对话框。

但是我遇到了正在保存的工作簿数据的问题,所以我被告知要使用Workbook.Save方法。它现在保存了正确的数据,但我无法指定文件名/位置。

我读到了.SaveCopyAs方法,我使用保存文件对话框提供文件名/位置,但是当我按下保存并关闭应用程序时,没有找到文件。

这是Savefile方法。

    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方法也没有保存,而这是因为他们没有给文件命名/扩展名。这是我检查的第一件事。这个互操作对我来说是新的,所以请原谅任何错误。

Filename variable

谢谢

1 个答案:

答案 0 :(得分:0)

尝试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);