Проблема Обзор:Excel Interop Нанести Chart Template
Я автоматизации генерации отчетов (Excel) для клиента с помощью C# с "родной" первенствовать поддержки (Microsoft.Office.Interop.Excel) и EPPlus библиотеку ,
Мой клиент не очень гибкий в отношении дизайна диаграмм, поэтому мои диаграммы должны иметь тот же стиль, что и у них.
Нет проблем, я экспортировали шаблоны диаграмм с помощью Excel 2010
Что не работает:
Я не могу применить любой шаблон диаграммы с помощью кода
Что я пробовал:
1 - EPPlus: нет поддержки для загрузки шаблонов в диаграммы
2 - InteropExcel: Сбой на применении шаблона вызывая исключение, вот мой код:
Application excelApp = null;
Workbook workbook = null;
Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
try
{
excelApp = new Microsoft.Office.Interop.Excel.Application();
workbook = excelApp.Workbooks.Open(config.DiretorioRelatorio);
worksheet = workbook.Sheets[Consts.RECOVERED_SHEET];
string template = config["templatePath"]; // .crtx file
ChartObjects charts = worksheet.ChartObjects();
ChartObject chart = ((ChartObject)charts.Item (0));
chart.Chart.ApplyChartTemplate(template);
}
catch (Exception ex)
{
Console.WriteLine (ex.Message);
}
finally
{
workbook.Save();
workbook.Close();
excelApp.Quit();
ReleaseObject (worksheet);
ReleaseObject (workbook);
ReleaseObject (excelApp);
}
Этот код либо бросает:
1 - excel interop HRESULT: 0x800A03EC
(на литье ChartObjects [0] для ChartObject)
2 - The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))
TL: DR:
Как я могу применить шаблон диаграммы из файла к существующей диаграмме на моей электронной таблице с помощью C#?
EDIT:
Pastebin код: ExcelInteropProblem
Я попытался изменить вместо одного, и проблема преобразования решена, но у меня все еще возникают проблемы при вызове приложения excel, например, в 90% случаев. Я убил все excel.exe, обработанные перед вызовом interop com для приложения excel, но он по-прежнему бросает мне исключение, как указано выше: RPC_E_SERVERCALL_RETRYLATER –
Странно, я сделал много вещей в interop и никогда не видел эту ошибку. вы нанизаны вообще? – JMK
Вызов этого метода выполняется в поток STA, вызываемый из основного потока. После запуска потока STA основной поток ждет, пока он не закончится (на основе возврата метода я решаю, следует ли повторять попытку или нет). Та же проблема возникает, когда метод вызывается внутри основного потока, кстати –