首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel 2010有时挂在c#代码中的c#()上,所有这些都与Excel2007一起工作

问Excel 2010有时挂在c#代码中的c#()上,所有这些都与Excel2007一起工作
EN

Stack Overflow用户
提问于 2014-03-03 12:38:31
回答 1查看 990关注 0票数 0

我的c#应用程序以以下方式将数据导出到xls文件(代码如下所示,简化为原始文件相当大):

  • сору预格式化的xls文件到一个新的路径;
  • 打开Excel应用程序;
  • 更改Excel应用程序选项,使其非交互式;
  • 打开工作簿;
  • 在里面写一些数据;
  • 保存工作簿;
  • 关闭工作簿;
  • 关闭Excel应用程序。

在Excel 2007中,一切都很顺利。对于Excel 2010,它有时挂在工作簿Save()方法上。没有错误,只挂起(因为它在等待类似对话框的内容)。

我找不到任何模式:50个调用中有将近一个挂起;重复的同一个调用可以挂起也可以不挂。

你想过为什么会这样吗?

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2014-03-03 12:56:40

不知道为什么会这样,但是试试看一张一张地保存表怎么样。

它不需要一次节省很多床单吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22147046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档