我要打开A.xls文件,在做了些修改后要保存为"D:\B.xls",要求程序运行完后A.xls文件没有变化,B.xls为修改后的。我用下面的方法,结果A.xls和B.xls都是修改后的了,怎么做才能实现我的目的?
myexcel.Workbooks.Open("C:\\A.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
……
myexcel.SaveWorkspace("D:\\B.xls");
myexcel.Quit();

解决方案 »

  1.   

    先把A.xls Copy到d:\B.xls
    再改B.xls
      

  2.   

    先把 A.xls 文件用 file.Copy 的方法复制一份存为 B.xls,然后再打开 B.xls 进行修改,这样可以不?
      

  3.   

    Quit()方法里应该有参数的吧.Quit(ref NotSaveChanges ......
      

  4.   

    一个完整的打开Excel模板文件、写入内容、另存的代码示例,请参考
    private void Save(string fileName)
    {
        Excel.ApplicationClass xlsApp = null;
        Excel.Workbook xlsBook = null;
        Excel.Worksheet xlsSheet = null;    try
        {
            xlsApp = new Excel.ApplicationClass();
            xlsApp.AlertBeforeOverwriting = false;
            xlsApp.DisplayAlerts = false;        string xlsFile = Application.StartupPath + m_xlsFile;  // excel摸板文件
            
            xlsBook = xlsApp.Workbooks.Open(xlsFile, Missing.Value, Missing.Value, Missing.Value, TGlobal.m_sqlPassword, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);        xlsBook = TGlobal.Excel_GetWorkBook(xlsApp);
            xlsSheet = book.Worksheets[sheetName];        int k = 0;
            foreach (DataGridViewRow row in dgv_CheckResult.Rows)
            {
                //...
                xlsSheet.Cells[5 + k, 02] = row.Cells["HistoryDBId"].Value;
            }        xlsBook.SaveAs(fileName, Missing.Value, "", Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
        }
        catch (Exception err)
        {
            MessageBox.Show("操作异常: " + Environment.NewLine + err.Message);
        }
        finally
        {
            xlsSheet = null;
            if (xlsBook != null)
            {
                xlsBook.Close(false, Missing.Value, Missing.Value);
                xlsBook = null;
            }
            if (xlsApp != null)
            {
                xlsApp.Quit();
                xlsApp = null;
            }
        }
    }
      

  5.   

    又,上面语句  xlsBook = TGlobal.Excel_GetWorkBook(xlsApp);  多余
      

  6.   

     xlsSheet = book.Worksheets[sheetName];应该改为 xlsBook.Worksheets[sheetName];  呵呵,修改自俺的一个公共静态方法,可能不全。又,模板Excel文件带口令,保存时也可以带也可以去。
      

  7.   

    只要把myexcel.Quit();改成myexcel.Quit(false);就可以了
      

  8.   


    Excel.Workbook mybook = myexcel.Workbooks.Open("C:\\A.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
    …… 
    mybook.Close(true,"D:\\B.xls");
    myexcel.Quit();或者Excel.Workbook mybook = myexcel.Workbooks.Open("C:\\A.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
    …… 
    myexcel.SaveWorkspace("D:\\B.xls"); 
    mybook.Close(false);
    myexcel.Quit();
      

  9.   

    先把A.xls Copy到d:\B.xls 
    再改B.xls这样可以。也可以用代码实现
    具体:        public void SaveDataTableToExcel(System.Data.DataTable excelTable,string filePath)
            {
                Microsoft.Office.Interop.Excel.Application app = 
                    new Microsoft.Office.Interop.Excel.ApplicationClass();
                try
                {
                    //让后台执行设置为不可见
                    app.Visible = false;
                    //新增加一个工作簿
                    Workbook wBook = app.Workbooks.Add(true);
                    //如果要打开已有的工作簿,则使用下面的注释语句
                    // Workbook wBook = app.Workbooks.Open(@"C:\YourPath\YourWorkbook.xls",
                    //    missing, missing, missing, missing, missing, missing, missing,
                    //    missing, missing, missing, missing, missing,missing, missing);                //取得一个工作表
                    //如果打开了已有的工作簿,也可以这样获取工作表Worksheet wSheet = wBook.ActiveSheet as Worksheet
                    Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
                    if (excelTable.Rows.Count > 0)
                    {
                        int row = 0;
                        row = excelTable.Rows.Count;
                        int col = excelTable.Columns.Count;
                        allsize = row;                    for (int i = 0; i < row; i++)
                        {
                            succeesize++;
                            prograsssize++;
                            for (int j = 0; j < col; j++)
                            {
                                string str = excelTable.Rows[i][j].ToString();
                                wSheet.Cells[i + 1, j + 1] = str;
                            }
                            SetMessageText();
                        }
                    }                int size = excelTable.Columns.Count;
                    for (int i = 0; i < size; i++)
                    {
                        wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
                    }                //设置禁止弹出保存和覆盖的询问提示框
                    app.DisplayAlerts = false;
                    app.AlertBeforeOverwriting = false;
                    //保存工作簿
                    wBook.Save();
                    //保存excel文件
                    app.Save(filePath + "\\导出表.xls");
                }
                catch(Exception err)
                {
                    MessageBox.Show("导入Excel出错!错误原因:"+ err.Message, "NaviDMS 2.2",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }     
                finally
                {
                    //确保Excel进程关闭
                    app.Quit();
                    app = null;
                }
            }
      

  10.   

    我试了下这个程序 好像保存的是xlw文件,如果要保存xls文件,还要加什么代码吗?