2012-12-22 100 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