Как заполнить данные в Excell SpreadSheet и как нарисовать диаграмму из этих данных с помощью С#

Я создал электронную таблицу (пример для MSDN), и теперь я хочу заполнить данные из набора данных на этом листе. Как только данные заполнены, я хочу нарисовать диаграмму на основе доступных данных. Я не хочу использовать сводную таблицу, я просто хочу нарисовать диаграмму любых данных, поступающих из набора данных. Я никогда раньше не работал с электронными таблицами и не могу найти правильный пример, чтобы получить помощь. У меня есть два вопроса здесь

  1. Как заполнить данные в SpreadSheet из набора данных
  2. Как нарисовать график (пример любого графика) на основе имеющихся данных

Любая помощь действительно будет оценена.

Ниже приведен фрагмент моего кода

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();
 }

person Learning Curve    schedule 05.07.2012    source источник


Ответы (2)


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 (название диаграммы, оси, линии сетки, цвета и т. д.).

person Urik    schedule 05.07.2012
comment
Привет Урик, Большое спасибо за ваше время и сообщение. Я работаю с OpenXML SDK 2.0. Я не собираюсь использовать Microsoft Object Library. Я нашел очень хороший пример заполнения данных из набора данных, теперь я работаю над созданием диаграммы. Спасибо за ответ! - person Learning Curve; 05.07.2012
comment
О, извините, но я видел, что вы написали Таблицу Excel на плитке. Я сохраню пример здесь для кого-то еще, кому это может быть интересно... - person Urik; 05.07.2012

Я нашел очень хорошее решение для этого сценария. Таблицу в Excel можно нарисовать по следующей ссылке http://www.nitrix-reloaded.com/2010/09/26/creating-excel-files-from-dataset-using-openxml-20-c-sharp/

а затем, используя библиотеки http://spreadsheetlight.com/, в Excel можно нарисовать любой тип диаграммы/графика.

Возможны изменения по сценарию. Например, предоставление начальных и конечных значений ячеек для создания диаграммы и т. д. В моем сценарии я работал со значениями времени выполнения, когда я не знаю, что и сколько столбцов есть в моей таблице Excel. Я могу предоставить фрагмент кода моего сценария, если кому-то это нужно.

С Уважением!

person Learning Curve    schedule 18.07.2012