C# 如何在Excel电子表格中填充数据,以及如何使用C从这些数据中绘制图表#

C# 如何在Excel电子表格中填充数据,以及如何使用C从这些数据中绘制图表#,c#,excel-2007,openxml,openxml-sdk,C#,Excel 2007,Openxml,Openxml Sdk,我已经创建了一个电子表格(例如MSDN),现在我想将数据集中的数据填充到此表格中。一旦填充了数据,我就想根据可用数据绘制图表。我不想使用数据透视表,我只想从数据集中绘制任何数据的图表。我以前从未使用过电子表格,也找不到合适的示例来获得帮助。 我这里有两个问题 如何从数据集填充电子表格中的数据 如何根据可用数据绘制图表(任何图表示例) 任何人的帮助都会得到感激 下面是我的代码片段 Public void CreateSpreadSheet() { DataSet dataSet = Get

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

  • 如何从数据集填充电子表格中的数据
  • 如何根据可用数据绘制图表(任何图表示例)
  • 任何人的帮助都会得到感激

    下面是我的代码片段

    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();
     }
    
    Public void CreateSpreadSheet()
    {
    DataSet DataSet=GetDataSetForPreadSheetChart();
    int noOfRows=dataSet.Tables[“SpreadSheetTestTable”].Rows.Count;
    int noOfColumns=dataSet.Tables[“SpreadSheetTestTable”].Columns.Count;
    //通过提供文件路径创建电子表格文档。
    SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Create(文件路径,SpreadsheetDocumentType.工作簿);
    //将工作簿部件添加到文档中。
    WorkbookPart WorkbookPart=电子表格文档.AddWorkbookPart();
    workbookpart.工作簿=新工作簿();
    //将工作表部件添加到工作簿部件。
    WorksheetPart WorksheetPart=workbookpart.AddNewPart();
    worksheetPart.Worksheet=新工作表(new SheetData());
    //将工作表添加到工作簿中。
    工作表=电子表格Document.WorkbookPart.Workbook。
    追加子项(新页());
    //附加新工作表并将其与工作簿关联。
    图纸=新图纸()
    {
    Id=spreadsheetDocument.WorkbookPart.GetIdOfPart(工作表部分),SheetId=1,Name=“mySheet”
    };
    附页(页);
    //从数据集获取数据并将其插入电子表格
    SheetData SheetData=sheet.GetFirstChild();
    for(int c=0;c

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

    我找到了一个非常好的解决方案。Excel中的表格可以通过以下链接绘制

    通过使用库,任何类型的图表都可以在Excel中绘制

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


    问候

    嗨,乌里克,非常感谢你的时间和帖子。我正在使用OpenXMLSDK2.0。我不打算使用Microsoft对象库。我发现了一个很好的从数据集填充数据的例子,现在我正在创建图表。谢谢你的回复!哦,对不起,但我看到你在瓷砖上写了“Excel电子表格”。我会在这里为其他可能感兴趣的人保留这个例子。。。
    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();
    }