Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将图形添加到通过TMS Flexcel生成的Excel文件中?_C#_Excel_Tms_Flexcel - Fatal编程技术网

C# 如何将图形添加到通过TMS Flexcel生成的Excel文件中?

C# 如何将图形添加到通过TMS Flexcel生成的Excel文件中?,c#,excel,tms,flexcel,C#,Excel,Tms,Flexcel,我有一个xlsx文件作为TMS Flexcel的模板。我用数据填充它,它将它呈现在一个漂亮的表中。到目前为止一切都很好。 问题是当我想添加一个图表时 生成的xlsx文件似乎已损坏,当我打开它时,Excel会尝试将其恢复。不幸的是,它失败了,因此生成的文件没有图形 有人遇到过吗?如何解决这个问题 我得到的错误信息是 Excel completed file level validation and repair. Some parts of this workbook may have be

我有一个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网站:

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

当数据导出到Excel时,它将替换虚拟数据并显示在图形中


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

David Voltrubec。我们有一个类似的问题,我们想在同一张纸上画两张表的图形,一张在另一张下面。Flexcel不支持动态绘制图形,因为它没有设置图形范围的属性。我所做的是 1.将表格写入XLSX文件并保存。 2.使用使用OpenXMLSDK的第三方库(MIT许可证)打开它,并指定要绘制的图形的范围和类型

这样,我也可以在动态表上生成图形

下面是我使用库的代码摘录。
List
是用于保存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;
    }
}
private void Drawchart InCelUsing SpreadsheetLight(字符串AstFileName、字符串AstFilePath、输出字符串AstAlteredFileName)
{
列出实际CellStartEndRanges;
string finalFilePath=string.Empty;
int工作表计数=0;
string newFilePath=string.Empty;
双图表位置开始=0;
双图表位置ND=0;
string endPointAlphabet=string.Empty;
string endPointNumber=string.Empty;
string startPointAlphabet=string.Empty;
string startPointNumber=string.Empty;
DrawExcelChart myExcelChartObject=新的DrawExcelChart();
SLChart SSLChartObject=null;
SLDocument SSLDocumentObject=null;
尝试
{
DecillCellStartRanges(超出实际CellStartRanges);
finalFilePath=AstFilePath+“\\”+AstFileName;
newFilePath=AstFilePath+“\\”+AstFileName.Replace(“haschart”,”);
使用(SSLDocumentObject=新SLDocument(finalFilePath))
{
WorksheetCount=SSLDocumentObject.GetSheetNames().Count;
对于(int workSheetCount=0;workSheetCount
谢谢,我会尝试一下,我会接受它作为有效答案,因为它可以在.xls(而不是xlsx)中生成图形。我的图表有点复杂,数据太动态了。因此,我将生成图形作为图像,然后插入excel。像这里