2012-12-22 105 views
0

开放和改变一个Excel文件后, 我试图挽救它,使用:Excel文件将不保存

excelApp.ActiveWorkbook.Save();

但是数据似乎并没有保存。

private void ExportResultsToExcel() 
{ 
    string fullFilename = Regex.Match(Path, @".*\\([^\\]+$)").Groups[1].Value; 
    string fileName = fullFilename.Substring(0, fullFilename.Length - 5); 
    var templatePath = Path.Replace(fileName, "SolutionTemplate"); 
    var solutionPath = Path.Replace(fileName, fileName+"_Solution"); 
    System.IO.File.Copy(templatePath, solutionPath); 

    var excelApp = new Excel.Application(); 
    var workbooks = excelApp.Workbooks; 
    var workbook = workbooks.Open(solutionPath, 0, true, 5, "", "", true, 
              XlPlatform.xlWindows, "\t", false, 
              false, 0, true, 1, 0); 
    var workSheets = workbook.Worksheets; 
    var workSheet = (Worksheet) workSheets.Item[1]; 
    var rowIndex = 2; 
    excelApp.DisplayAlerts = false; 
    excelApp.ScreenUpdating = false; 
    excelApp.Visible = false; 
    excelApp.UserControl = false; 
    excelApp.Interactive = false; 
    foreach (var product in DemandData.Keys) 
    { 
     workSheet.Cells[rowIndex, 1] = product; 
     workSheet.Cells[rowIndex, 2] = Result[product][0]; 
     workSheet.Cells[rowIndex, 3] = Result[product][1]; 
     workSheet.Cells[rowIndex, 4] = Result[product][2]; 
     workSheet.Cells[rowIndex, 5] = Result[product][3]; 
     workSheet.Cells[rowIndex, 6] = Result[product][4]; 
     workSheet.Cells[rowIndex, 7] = Result[product][5]; 
     workSheet.Cells[rowIndex, 8] = Result[product][6]; 
     workSheet.Cells[rowIndex, 9] = Result[product][7]; 
     workSheet.Cells[rowIndex, 10] = Result[product][8]; 
     workSheet.Cells[rowIndex, 11] = Result[product][9]; 
     workSheet.Cells[rowIndex, 12] = Result[product][10]; 
     workSheet.Cells[rowIndex, 13] = Result[product][11]; 
     workSheet.Cells[rowIndex, 14] = Result[product][12]; 
     rowIndex++; 
    } 
    int hWnd = excelApp.Application.Hwnd; 
    //workbook.Save(); 
    excelApp.ActiveWorkbook.Save(); 
    Marshal.ReleaseComObject(workSheets); 
    Marshal.ReleaseComObject(workSheet); 
    Marshal.ReleaseComObject(workbooks); 
    Marshal.ReleaseComObject(workbook); 
    workbook.Close(); 
    excelApp.Quit(); 
    TryKillProcessByMainWindowHwnd(hWnd); 

} 
+0

粘贴你完整的代码,如果你有写你的错误消息。阅读[常见问题]和[问] –

+0

没有错误消息 - 更改只是不保存。 – KayzerSoze

+0

也许在你的foreach循环中有错误? 检查DemandData.Keys是否不为NULL并且> 0。 – jAC

回答

1

我相信我看到您的问题..在你的open()方法,你打开它作为只读 你可以试试下面的变化这

var workbook = workbooks.Open(solutionPath, 0, true, 5, "", "", true, 
              XlPlatform.xlWindows, "\t", false, 
              false, 0, true, 1, 0); 

var workbook = workbooks.Open(solutionPath, 0, false, 5, "", "", true, 
              XlPlatform.xlWindows, "\t", false, 
              false, 0, true, 1, 0); 

传入false只读 Workbooks.Open方法的参数,以便您可以保存它稍后使用Workbook.Save方法。

其他建议将还在Marshal.ReleaseComObject的移动接近该位置

workbook.Close(); 
Marshal.ReleaseComObject(workSheets); 
Marshal.ReleaseComObject(workSheet); 
Marshal.ReleaseComObject(workbooks); 
Marshal.ReleaseComObject(workbook); 

看在MSDN,你还可以设置对象=为null,以及只是为了调用后是安全的4对Marshal.ReleaseComObject()方法

微软参考MarshalReleaseComObject

+0

非常感谢!!!! – KayzerSoze