C#Excel自动化仅在Excel可见时才起作用

我已经开发了一个小型C#工具,可以打开几个工作簿,并将工作表和特定的单元格区域复制到合并的工作簿中。 该应用程序工作完美,直到我设置Excel.Aplication.Visible = false。 然后,在打开工作簿时抛出COM错误800A03EC。 这是相同的位置,当Visible = true时打开相同的工作簿。

Excel处理发生在BackgroundWorker线程上。

首先,我启动Excel并打开几个“全局”工作簿,这些工作簿将用作所有合并工作簿的源代码。

//Start Excel and get Application object. XL = new Excel.Application(); XL.Visible = true; //Open workbooks that are used for all providers sourceTemplate = (Excel._Workbook)(XL.Workbooks.Open(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Provider Summary Template.xlsx"))); currentTemplateSheet = sourceTemplate.Worksheets["Summary"]; sourceAuditPlan = (Excel._Workbook)(XL.Workbooks.Open(Path.Combine(DataSetFolder.Text, "Audit Plan.xlsx"))); currentAuditPlanSheet = sourceAuditPlan.Worksheets["Audit Plan"]; sourceRiskSummary = (Excel._Workbook)(XL.Workbooks.Open(Path.Combine(DataSetFolder.Text, "Provider Risk Summary.xlsx"))); currentRiskSummarySheet = sourceRiskSummary.Worksheets["Visible Risk"]; 

然后,我循环列出一系列工作簿,一次打开一个工作簿,然后根据工作簿中的数据打开其他工作簿(因此打开Dr. One的工作簿,一名脊椎治疗师,然后打开脊椎治疗师专业的应用工作手册等)。 )。 在第一个利用率工作簿上抛出错误。

 foreach (string workbook in workbooksList) { try { //Determine provider ID - in target filename as Dr_[Provider ID]_RVU.xlsx string providerId = workbook.Substring(workbook.IndexOf("_") + 1, workbook.LastIndexOf("_") - (workbook.IndexOf("_") + 1)); //Open target workbook (Dr_xx_RVU.xlsx) targetWorkbook = (Excel._Workbook)(XL.Workbooks.Open(workbook)); Excel.Sheets targetWorksheets = targetWorkbook.Worksheets; currentTargetSheet = (Excel._Worksheet)targetWorksheets.get_Item(1); //Determine specialty - in cell A1 of first worksheet as [Data Set Name]: [Provider Name], [Specialty] Excel.Range providerRange = currentTargetSheet.get_Range("A1"); string providerInfo = providerRange.Cells.Value; string specialty = providerInfo.Substring(providerInfo.LastIndexOf(",") + 2); string providerName = providerInfo.Substring(providerInfo.LastIndexOf(":") + 2, providerInfo.LastIndexOf(",") - (providerInfo.LastIndexOf(":") + 2)); //Open appropriate Modifier Util workbook, select and copy this provider's worksheet string sourceWorkbookName = Path.Combine(DataSetFolder.Text, "Modifier Utilization - " + specialty + ".xlsx"); Debug.WriteLine(sourceWorkbookName); sourceWorkbook = (Excel._Workbook)(XL.Workbooks.Open(sourceWorkbookName)); if (sourceWorkbook == null) { Debug.WriteLine("Unable to open worksheet " + sourceWorkbookName); } Excel.Sheets sourceWorksheets = sourceWorkbook.Worksheets; currentSourceSheet = (Excel._Worksheet)sourceWorksheets[providerId]; if (currentSourceSheet == null) { Debug.WriteLine("Unable to find " + providerId + " worksheet in " + sourceWorkbookName); } currentSourceSheet.Copy(Before: currentTargetSheet); //insert as first worksheet currentTargetSheet = (Excel._Worksheet)targetWorksheets.get_Item(1); currentTargetSheet.Name = "Modifier Util"; 

我省略了循环的其余部分 – 我只是以同样的方式打开另外两个工作簿,将工作表复制到目标工作簿中,保存目标并closures下一次迭代的这组工作簿。

发生错误

 sourceWorkbook = (Excel._Workbook)(XL.Workbooks.Open(sourceWorkbookName)); 

所以我看到sourceWorkbookName的DebugWriteLine,但没有更多。 Excel打开一个对话框,显示错误号码800A03EC(我已经研究过)。 如果我允许应用程序继续处理,则在下一次迭代时会打开一个对话框,宣布该工作簿已经打开,并且是否需要重新打开并丢失更改或继续。 根据第一个错误以及没有从该工作簿复制工作表的事实,对我来说没有任何意义。

再次,当Excel.visible = true时,一切正常。

我赞赏所有的build议,斯科特

你有没有尝试设置sourceWorkbookName到一个没有空间的基本文件名,在没有任何权限问题的目录? 我知道这是一个远投,但对我来说,这将是开始的地方,我遇到了一些奇怪的行为与Excel 2007在那一个。