【问题标题】:How to populate data in Excell SpreadSheet and than how to draw Chart from this data using C#如何在 Excel 电子表格中填充数据,然后如何使用 C# 从此数据中绘制图表
【发布时间】:2012-07-05 09:09:19
【问题描述】:

我创建了一个电子表格(MSDN 的示例),现在我想将数据集中的数据填充到该表格中。填充数据后,我想根据可用数据绘制图表。我不想使用数据透视表,我只想绘制来自数据集的任何数据的图表。我以前从未使用过电子表格,也找不到合适的示例来获得帮助。 我这里有两个问题

  1. 如何从数据集填充电子表格中的数据
  2. 如何根据可用数据绘制图表(任何图表示例)

真的会感谢任何人的帮助。

下面是我的代码sn-p

Public void CreateSpreadSheet()
{
    DataSet dataSet = GetDatasetForSpreadSheetChart();
    int noOfRows = dataSet.Tables["SpreadSheetTestTable"].Rows.Count;
    int noOfColumns = dataSet.Tables["SpreadSheetTestTable"].Columns.Count;

    // Create a spreadsheet document by supplying the filepath.
    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filePath,SpreadsheetDocumentType.Workbook);

    // Add a WorkbookPart to the document.
    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet(new SheetData());

    // Add Sheets to the Workbook.
    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
    AppendChild<Sheets>(new Sheets());

    // Append a new worksheet and associate it with the workbook.
    Sheet sheet = new Sheet()
    {
        Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),SheetId = 1,Name = "mySheet"
    };

    sheets.Append(sheet);

    // Get data from dataset and insert it in spreadsheet
    SheetData sheetData = sheet.GetFirstChild<SheetData>();
    for (int c = 0; c < noOfColumns; c++)
    {
       string headerName = dataSet.Tables["SpreadSheetTestTable"].Columns[c].ToString();
    }

    workbookpart.Workbook.Save();

    // Close the document.
    spreadsheetDocument.Close();
 }

【问题讨论】:

    标签: c# excel-2007 openxml openxml-sdk


    【解决方案1】:
    public void CreateExcelDocFromDatatable(DataTable dataTable)
    {
        object misValue = System.Reflection.Missing.Value;
        Excel.Application xlApp = new Excel.ApplicationClass();
        Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
        Excel.Worksheet xlWorkSheet1 = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    
        int iCol = 0;
        foreach (DataColumn c in dataTable.Columns)
        {
            iCol++;
            xlWorkSheet1.Cells[1, iCol] = c.ColumnName;
        }
    
        int iRow = 0;
        foreach (DataRow r in dataTable.Rows)
        {
            iRow++;
            iCol = 0;
            foreach (sd.DataColumn c in mdtOutput.Columns)
            {
                string cellData = r[c.ColumnName].ToString();
                iCol++;
                xlWorkSheet1.Cells[iRow + 1, iCol] = r[c.ColumnName];
            }
        }
    
        xlWorkSheet1.Activate();
        var range = xlWorkSheet1.get_Range("2:2",misValue);
        range.Select();
        xlApp.ActiveWindow.FreezePanes = true;
        range = xlWorkSheet1.get_Range("1:1", misValue);
        range.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow);
    
        mXlWorkBook.SaveAs(outputFilePath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlApp.Visible = true;
        xlWorkSheet1.Activate();
    }
    
    
    
    
    private void CreateExcelCharts()
    {
        object misValue = System.Reflection.Missing.Value;
        Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
        Excel.Worksheet chartsSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);
        chartsSheet.DisplayRightToLeft = false;
        chartsSheet.Name = "Charts";
    
        Excel.ChartObjects chartObjs = (Excel.ChartObjects)chartsSheet.ChartObjects(Type.Missing);
        Excel.ChartObject chartObj = chartObjs.Add(200, 40, 300, 300);
        Excel.Chart xlChart = chartObj.Chart;
        Excel.Range range = chartsSheet.get_Range("B2", "C7");
        xlChart.SetSourceData(range, misValue);
        xlChart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xl3DPie;
        mXlWorkBook.Save();
    }
    

    然后您可以使用图表属性,您可以在其中控制几乎所有内容,如 Excel UI(图表标题、轴、网格线、颜色等)

    【讨论】:

    • 嗨 Urik,非常感谢您的时间和帖子。我正在使用 OpenXML SDK 2.0。我不打算使用 Microsoft 对象库。我找到了一个很好的从数据集中填充数据的例子,现在我正在创建图表。感谢您的回复!
    • 哦,抱歉,我看到您在磁贴中写了“Excel 电子表格”。我会在这里为可能感兴趣的其他人保留示例...
    【解决方案2】:

    我已经为这种情况找到了一个非常好的解决方案。 Excel中的表格可以从以下链接中绘制 http://www.nitrix-reloaded.com/2010/09/26/creating-excel-files-from-dataset-using-openxml-20-c-sharp/

    通过使用http://spreadsheetlight.com/ 库,任何类型的图表/图形都可以在 Excel 中绘制。

    可以根据场景进行更改。例如为图表创建提供开始和结束单元格值等。在我的场景中,我使用了运行时值,但我不知道我的 Excel 表中有哪些列和多少列。如果有人需要,我可以提供我的场景的代码 sn-p。

    问候!

    【讨论】:

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