我正在嘗試將一些樣式應用到工作簿中的單元格。我想在後臺線程中做到這一點,所以我的GUI可以保持響應。這項工作應該需要幾秒鐘,如果我點擊文檔中的一些隨機單元格,我會得到一個異常。這裏是我的代碼:在後臺運行時Excel互操作COM異常
public void ApplyStyles()
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += DoWork;
bw.RunWorkerAsync();
}
private void DoWork(object sender, DoWorkEventArgs e)
{
try
{
foreach (ICell xcell in cells)
{
Microsoft.Office.Interop.Excel.Range cell = cellUtility.GetCell(xcell);
if (styles.ContainsKey(styleIds[xcell.Style]))
{
Style s = styles[xcell.Style];
cell.Style = s;
}
}
}
catch (Exception ex)
{
if (Logger.IsErrorEnabled)
{
Logger.Error(ex.ToString());
}
messageBox.ShowErrorMessage(localizationMessages.ApplyingErrorText, localizationMessages.ApplyingErrorCaption);
}
}
當異常發生時,這是我收到的消息;
System.Runtime.InteropServices.COMException (0x800AC472): Exception from HRESULT: 0x800AC472
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Range.set_Style(Object value)
at ABZ.ReportFactory.OfficeAddin.Excel.BatchLinking.BackgroundStyleApplier.DoWork() in C:\ABZ\ABZ ReportFactory Office Addin\ABZ.ReportFactory.OfficeAddin.Excel\BatchLinking\BackgroundStyleApplier.cs:line 86
是否有可能做這種風格在後臺線程應用操作?我該怎麼做?
我遇到的第二個問題是,當這種風格的應用程序在後臺運行時,我的光標不斷地從繁忙狀態變爲常規狀態,直到此操作結束。我希望光標正常。該用戶完全不知道這種背景操作。
歡呼聲, 弗拉基米爾
http://www.myomron.com/index.php?action=kb&article=1324 – 2012-03-01 12:29:04
因此,Excel對象是可見的,而這是發生? – SeanCocteau 2012-03-01 12:38:09