0

基本的な仕組みは理解できたと思いますが、データがエクスポートされていません。私はこのブログをフォローしてきましたが、2 つのシートでワークブックを作成しているという点で私の状況は多少異なりますが、最初のシートに値を入力することができないため、その時点までには到達していません。

基本的に、私は 2 つのグリッドビューに入力するデータをフェッチしています。ボタン イベントで、このすべての作業を行います。ファイル名はユーザーの選択に基づいて生成されていますが、スプレッドシート オブジェクトのインスタンス化、スプレッドシートへのワークブックの追加などは問題ではありません。

ここまでは、最初のスプレッドシートの部分だけをコーディングしました。コードは次のようになります。前もって感謝します - Risho。

public void btnExport_Click(object sender, System.EventArgs e)
{
    string fileName1 = string.Empty;
    string sheetName1 = "XXXXX Output";
    string sheetName2 = "YYYYY Output";
    if (ddlIntervals.SelectedValue.ToString() == "3")
    {
        fileName1 = @"C:\Temp\XY_Totals_" + ddlSites.SelectedItem.ToString() + ".xlsx";
    }
    else if (ddlIntervals.SelectedValue.ToString() == "2")
    {
        fileName1 = @"C:\Temp\XYbyYear_" + ddlSites.SelectedItem.ToString() + ".xlsx";
    }
    else
    {
        fileName1 = @"C:\Temp\XYByMonth_" + ddlSites.SelectedItem.ToString() + ".xlsx";
    }
    // Create a spreadsheet document by supplying the file name.
    SpreadsheetDocument _spreadsheetDocument = SpreadsheetDocument.Create(fileName1, 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>();
    // 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 = sheetName1 };
    _sheets.Append(_sheet);
    //_worksheetPart.Worksheet = new Worksheet(new SheetData());
    Worksheet _worksheet = new Worksheet();
    SheetData _sheetData = new SheetData();    // Create sheet object
    UInt32Value _currRowIndex = 1U;   // Initialize row index
    int _colIndex = 0;
    Row _excelRow;
    // Iterate through table rows and add them to the worksheet
    // we're starting with roindex -1 instesd of zero, as we create a header row first
    for (int rowindex = -1; rowindex < GridView1.Rows.Count; rowindex++)
    {
        _excelRow = new Row();
        _excelRow.RowIndex = _currRowIndex++;
        for (_colIndex = 0; _colIndex < GridView1.Columns.Count; _colIndex++)
        {
            Cell _cell = new Cell()
            {
                // Create the cell reference of format A1, B2, etc.
                CellReference = Convert.ToString(Convert.ToChar(65 + _colIndex)),
                DataType = CellValues.String
            };
            CellValue _cellVallue = new CellValue();
            // If it's a header row, cell value will be nothing but column name
            // It if a not header row, set the column value to the cell
            if (rowindex == -1)
                _cellVallue.Text = GridView1.Columns[_colIndex].HeaderText.ToString();
            else
                _cellVallue.Text = GridView1.Rows[rowindex].Cells[_colIndex].Text;
            _cell.Append(_cellVallue); // Add the value to the cell
            _excelRow.Append(_cell);   // Add the cell to the row
        }
        _sheetData.Append(_excelRow);  // Add the row to the sheet
    }
    _worksheet.Append(_sheetData);
    _worksheetPart.Worksheet =_worksheet;
    Sheet _sheet2 = new Sheet() { Id = _spreadsheetDocument.WorkbookPart.GetIdOfPart(_worksheetPart), SheetId = 2, Name = sheetName2 };
    _sheets.Append(_sheet2);
    _workbookPart.Workbook.Save();
    //Close the document.
    //_spreadsheetDocument.Close();
} 
4

2 に答える 2

0

SQL Server を使用していて、状況に応じて動作する場合は、SSRS を使用して Excel ファイルを生成することをお勧めします。Open XML による直接的な方法の使用を検討しましたが、私のニーズには SSRS の方が適していることがわかりました。完全にあなたの要件に依存します。

于 2013-02-12T03:44:42.910 に答える
0

動作しているこのブログのコードを試してください

「codeproject.com/Tips/366446/Export-GridView-Data-to-Excel-using-OpenXml」

于 2013-02-12T14:58:42.527 に答える