簡體   English   中英

Excel 2010有時會掛在C#代碼的workbook.Save()上,一切都可以在Excel 2007中使用

[英]Excel 2010 sometimes hangs on workbook.Save() from c# code, everything worked with Excel 2007

我的c#應用程序以以下方式將數據導出到xls文件(下面提供了代碼,由於原始代碼相當大,因此進行了簡化):

  • 將預格式化的xls文件更改為新路徑;
  • 打開Excel應用程序;
  • 更改Excel應用程序選項以使其不交互式;
  • 打開工作簿;
  • 在里面寫一些數據;
  • 保存工作簿;
  • 關閉工作簿;
  • 關閉Excel應用程序。

使用Excel 2007一切正常,使用Excel 2010有時會掛在工作簿的Save()方法上。 沒有錯誤,只是掛起(正在等待對話框之類的東西)。

我找不到任何模式:50個呼叫中有將近1個掛起。 重復的同一呼叫可以掛起或不掛起。

有什么想法為什么會發生這種情況?

var app = new Microsoft.Office.Interop.Excel.Application();

app.Visible = false;
app.Interactive = false;
app.ScreenUpdating = false;
app.AlertBeforeOverwriting = false;
app.DisplayFullScreen = false;
app.DisplayFunctionToolTips = false;
app.DisplayInfoWindow = false;
app.AskToUpdateLinks = false;
app.ShowStartupDialog = false;
app.DisplayAlerts = false;
app.UserControl = false;
app.DisplayStatusBar = false;
app.IgnoreRemoteRequests = true;
app.EnableLargeOperationAlert = false;
app.EnableEvents = false;

File.Copy(pathToTemplate, randomTempFileName);

var wb = app.Workbooks.Open
    (randomTempFileName, 3, Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, true, Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, false, Missing.Value, Missing.Value);

app.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual;

for (int i = 1; i <= wb.Sheets.Count; i++)
{
    var ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets[i];
    try
    {
        ws.EnableCalculation = false;
        // Perform actions to save data into worksheet
    }
    finally
    {
        ws.EnableCalculation = true;
        ComObject.Release(ws);
    }
}

app.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationAutomatic;

wb.Save();
wb.Close(false, Missing.Value, Missing.Value);
ComObject.Release(wb);

var workbooks = app.Workbooks;
foreach (Microsoft.Office.Interop.Excel.Workbook workbook in workbooks)
{
    workbook.Close(false, Missing.Value, Missing.Value);
    ComObject.Release(workbook);
}
ComObject.Release(workbooks);

app.Quit();
ComObject.Release(app);
app = null;

不知道為什么會這樣,但是如何嘗試逐頁保存。

是否不必一次節省很多紙?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM