[英]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.