【问题标题】:How to add graph to Excel file generated via TMS Flexcel?如何将图形添加到通过 TMS Flexcel 生成的 Excel 文件中?
【发布时间】:2015-09-18 10:48:44
【问题描述】:

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

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

有人遇到过吗?如何解决?

我得到的错误信息是这样的

 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

【问题讨论】:

    标签: c# excel tms flexcel


    【解决方案1】:

    我们取得了一些成功是: 1. 将一些虚拟数据添加到将存储实际数据的表中。 1. 从虚拟数据创建图表并按照您想要的方式对其进行格式化。

    当数据导出到 Excel 时,它将替换虚拟数据并出现在图表中。

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

    【讨论】:

    • 谢谢,我试试看
    • 我会接受它作为有效答案,因为可以在 .xls(而不是 xlsx)中生成图形。我的图表有点复杂,数据太动态了。所以我会改为将图形生成为图像,然后插入到 excel 中。喜欢这里stackoverflow.com/questions/1823884/…
    【解决方案2】:

    大卫·沃尔特鲁贝克。我们有一个类似的问题,我们想为同一张表中的 2 个表格绘制图表,一个在另一个之下。 Flexcel 不支持动态绘制图形,因为它没有设置图形范围的属性。我所做的是 1. 将表格写入 XLSX 文件并保存。 2. 使用使用 Open XML SDK 的第 3 方库(MIT 许可)打开它,并指定要绘制的图形的范围和类型。

    这样我也可以在动态表格上生成图表。

    下面是我使用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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多