我要打开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();
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();
再改B.xls
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;
}
}
}
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();
再改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;
}
}