簡體   English   中英

使用 C# 從 SQL 數據集到 Excel 流的 OpenXml

[英]OpenXml from SQL data set to Excel stream using C#

我正在嘗試從 sql 數據庫中獲取數據到 Excel 模板,我在流中捕獲了 excel 模板,我試圖根據 sql 數據輸出操作 excel 數據,下面是和平代碼以供參考。

foreach (DataRow item in data.Rows)
      {
         foreach (var row in rows)
               {
              if (reportname == "PivotTable")
              {
               int i = 0;
                  var cells = row.Elements<Cell>();
                  foreach (var cell in cells)
                  {
                      string col = tem.ItemArray[i].ToString();
                      cell.CellValue = new CellValue(col);
                      string cellRef = cell.CellReference.InnerText;
                      cell.DataType = new EnumValue<CellValues>(CellValues.Number);

                      i++;
                  }
                  worksheetPart.Worksheet.Save();
              }
          }

          spreadSheetDocument.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;
          spreadSheetDocument.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;
          workbookPart.Workbook.Save();
      }

使用 DocumentFormat.OpenXML

using (var memoryStream = new MemoryStream())
{
using (var excel = SpreadsheetDocument.Create(memoryStream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook, true))
{
   workbookPart = excel.AddWorkbookPart();
   workbookPart.Workbook = new Workbook();
   uint sheetId = 1;
   excel.WorkbookPart.Workbook.Sheets = new Sheets();
   Sheets sheets = excel.WorkbookPart.Workbook.GetFirstChild<Sheets>();
            
            
   Worksheet worksheet = new Worksheet();
           wSheetPart.Worksheet = worksheet;
           SheetData sheetData = new SheetData();
           worksheet.Append(sheetData);
    
           int i=1;
           string[] strColumnArray = 
                  {"A","B","C","D","E","F","G","H","I","J","K","L"};
    foreach (DataRow item in data.Rows)
    {
       foreach (var row in rows)
        {
          if (reportname == "PivotTable")
          {
             int j = 1;
             var cells = row.Elements<Cell>();
             foreach (var cell in cells)
             {
                string col = tem.ItemArray[i].ToString();
                AddToCell(sheetData, i, j, strColumnArray[j-1] , CellValues.Number, col);
                j++;
             }
             
          }
    
           i++;
         }
    
    }
            
           excel.Close();
            
       }
    
                        FileStream fileStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "DBToExcel.xlsx", FileMode.Create, FileAccess.Write);
                        memoryStream.WriteTo(fileStream);
                        fileStream.Close();
                        memoryStream.Close();
                    }

創建一個添加到單元格的方法:

public void AddToCell(SheetData sheetData, UInt32Value styleIndex, UInt32 uint32rowIndex, string strColumnName, DocumentFormat.OpenXml.EnumValue<CellValues> CellDataType, string strCellValue)
{
  Row row = new Row() { RowIndex = uint32rowIndex };
  Cell cell = new Cell();
    
  cell = new Cell() { StyleIndex = styleIndex };
  cell.CellReference = strColumnName + row.RowIndex.ToString();
  cell.DataType = CellDataType;
  cell.CellValue = new CellValue(strCellValue);
  row.AppendChild(cell);
    
  sheetData.Append(row);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM