如何将graphics添加到通过TMS Flexcel生成的Excel文件?

我有一个xlsx文件作为TMS Flexcel的模板。 我用数据填充它,它将呈现在漂亮的表格中。 一切都很好。 问题是当我想添加一个graphics。

生成的xlsx文件似乎已损坏,Excel打开时尝试恢复它。 不幸的是,它失败了,所以生成的文件没有graphics。

有没有人遇到过它? 如何解决它?

我得到的错误信息是这个

Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded. Removed Part: Drawing shape. 

链接到Flexcel网站: http ://www.tmssoftware.com/site/default.asp

我们所做的一些成功的事情是:1.将一些虚拟数据添加到实际数据将被存储的表中。 1.从虚拟数据中创build一个graphics并按照你想要的方式进行格式化。

将数据导出到Excel时,将replace虚拟数据并显示在graphics中。

TMS对xlsx文件的支持也非常有限。 尝试使用xls文件。

大卫·伏特鲁贝克 我们有一个类似的问题,我们想在同一张表格中的两个表格中绘制graphics。 Flexcel不支持graphics绘制dynamic,因为它没有属性来设置graphics的范围。 我做的是1.在XLSX文件中写入表格并保存。 2.使用使用Open XML SDK的第三方库(MIT许可证)打开它,并指定要绘制的图的范围和types。

这样我也可以在dynamic表上生成图表。

下面是我使用SpreadSheetLight库的代码提取。 List<DrawExcelChart.DynamicExcelChart>是通用列表,用于存放startRange, GetColumnAlphabetAndNumber用于将列/行转换为Excel字母数字单元格引用。

 private void DrawChartInExcelUsingSpreadSheetLight(string astrFileName, string astrFilePath, out string astrAlteredFileName) { List<DrawExcelChart.DynamicExcelChart> ActualCellStartEndRanges; string finalFilePath = string.Empty; int WorkSheetsCount = 0; string newFilePath = string.Empty; double ChartYpositionStart = 0; double ChartYpositionEnd = 0; string endPointAlphabet = string.Empty; string endPointNumber = string.Empty; string startPointAlphabet = string.Empty; string startPointNumber = string.Empty; DrawExcelChart myExcelChartObject = new DrawExcelChart(); SLChart SSLChartObject = null; SLDocument SSLDocumentObject = null; try { DecideCellStartEndRanges(out ActualCellStartEndRanges); finalFilePath = astrFilePath + "\\" + astrFileName; newFilePath = astrFilePath + "\\" + astrFileName.Replace("haschart", ""); using (SSLDocumentObject = new SLDocument(finalFilePath)) { WorkSheetsCount = SSLDocumentObject.GetSheetNames().Count; for (int workSheetCount = 0; workSheetCount < WorkSheetsCount; workSheetCount++) { SSLDocumentObject.SelectWorksheet(SSLDocumentObject.GetSheetNames()[workSheetCount]); myExcelChartObject.GetColumnAlphabetAndNumber(ActualCellStartEndRanges[workSheetCount].FirstChart.startRange, out startPointAlphabet, out startPointNumber); myExcelChartObject.GetColumnAlphabetAndNumber(ActualCellStartEndRanges[workSheetCount].FirstChart.endRange, out endPointAlphabet, out endPointNumber); ChartYpositionStart = Convert.ToInt32(endPointNumber) + 1; ChartYpositionEnd = Convert.ToInt32(endPointNumber) + 2; SSLDocumentObject.SetRowHeight(Convert.ToInt32(startPointNumber), Convert.ToInt32(endPointNumber) + 1, 15); SSLChartObject = SSLDocumentObject.CreateChart(ActualCellStartEndRanges[workSheetCount].FirstChart.startRange, ActualCellStartEndRanges[workSheetCount].FirstChart.endRange); SSLChartObject.SetChartType(SpreadsheetLight.Charts.SLLineChartType.LineWithMarkers); SSLChartObject.SetChartPosition(ChartYpositionStart, 1, ChartYpositionEnd, 14); SSLDocumentObject.SetRowHeight(Convert.ToInt32(ChartYpositionEnd), 180); SSLChartObject.SetChartStyle(SpreadsheetLight.Charts.SLChartStyle.Style2); SSLChartObject.Border.SetAutomaticColor(); SSLChartObject.Legend.LegendPosition = DocumentFormat.OpenXml.Drawing.Charts.LegendPositionValues.Right; SSLDocumentObject.InsertChart(SSLChartObject); } SSLDocumentObject.SelectWorksheet(SSLDocumentObject.GetSheetNames()[0]); SSLDocumentObject.SaveAs(newFilePath); } astrAlteredFileName = astrFileName.Replace("haschart", ""); } catch (Exception obj_Except) { astrAlteredFileName = string.Empty; } finally { ActualCellStartEndRanges = null; finalFilePath = string.Empty; WorkSheetsCount = 0; newFilePath = string.Empty; ChartYpositionStart = 0; ChartYpositionEnd = 0; endPointAlphabet = string.Empty; endPointNumber = string.Empty; startPointAlphabet = string.Empty; startPointNumber = string.Empty; myExcelChartObject = null; SSLChartObject = null; SSLDocumentObject = null; } }