C# 更快地创建Excel(互操作)
我将减慢进程的代码识别为以下代码(我正在填充单元格): 我在这里做的基本上是使用数据集从数据库加载一些数据C# 更快地创建Excel(互操作),c#,excel,C#,Excel,我将减慢进程的代码识别为以下代码(我正在填充单元格): 我在这里做的基本上是使用数据集从数据库加载一些数据 Microsoft.Office.Interop.Excel.Range range1 = null; Microsoft.Office.Interop.Excel.Range cell1 = null; Microsoft.Office.Interop.Excel.Borders border1 = null; for (i = 0; i <= ds.Tables[0].Rows
Microsoft.Office.Interop.Excel.Range range1 = null;
Microsoft.Office.Interop.Excel.Range cell1 = null;
Microsoft.Office.Interop.Excel.Borders border1 = null;
for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
int s = i + 1;
for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
{
data = ds.Tables[0].Rows[i].ItemArray[j].ToString();
xlWorkSheet.Cells[s + 1, j + 1] = data;
range1 = xlWorkSheet.UsedRange;
cell1 = range1.Cells[s + 1, j + 1];
border1 = cell1.Borders;
if (((IList)terms).Contains(xlWorkSheet.Cells[1, j + 1].Value.ToString()))
{
cell1.Interior.Color = System.Drawing.Color.Red;
}
range1.Columns.AutoFit();
range1.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
border1.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
border1.Weight = 2d;
}
}
Microsoft.Office.Interop.Excel.Range range1=null;
Microsoft.Office.Interop.Excel.Range cell1=null;
Microsoft.Office.Interop.Excel.Borders border1=null;
对于(i=0;iInterop库,速度非常慢,需要花费大量的系统资源
您不必使用互操作库来创建Excel文件,只需使用OpenXML库即可。
我在生产中使用它。超过100万行,将数据集导出到excel文件只需10秒钟
以下是引用的示例代码:
private void ExportDSToExcel(数据集ds,字符串目标)
{
使用(var工作簿=SpreadsheetDocument.Create(目标,DocumentFormat.OpenXml.SpreadsheetDocumentType.工作簿))
{
var workbookPart=workbook.AddWorkbookPart();
workbook.WorkbookPart.workbook=newdocumentformat.OpenXml.Spreadsheet.workbook();
workbook.WorkbookPart.workbook.Sheets=新文档格式.OpenXml.Spreadsheet.Sheets();
uint sheetId=1;
foreach(ds.Tables中的数据表)
{
var sheetPart=workbook.WorkbookPart.AddNewPart();
var sheetData=new DocumentFormat.OpenXml.Spreadsheet.sheetData();
sheetPart.Worksheet=newdocumentformat.OpenXml.Spreadsheet.Worksheet(sheetData);
DocumentFormat.OpenXml.Spreadsheet.Sheets=工作簿.WorkbookPart.workbook.GetFirstChild();
string relationshipId=工作簿.WorkbookPart.GetIdOfPart(sheetPart);
如果(sheets.Elements().Count()>0)
{
床单=
sheets.Elements().Select(s=>s.SheetId.Value).Max()+1;
}
DocumentFormat.OpenXml.Spreadsheet.Sheet Sheet=新的DocumentFormat.OpenXml.Spreadsheet.Sheet(){Id=relationshipId,SheetId=SheetId,Name=table.TableName};
附页(页);
DocumentFormat.OpenXml.Spreadsheet.Row headerRow=新的DocumentFormat.OpenXml.Spreadsheet.Row();
列表列=新列表();
foreach(table.Columns中的DataColumn列)
{
columns.Add(column.ColumnName);
DocumentFormat.OpenXml.Spreadsheet.Cell=新DocumentFormat.OpenXml.Spreadsheet.Cell();
cell.DataType=DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
cell.CellValue=newdocumentformat.OpenXml.Spreadsheet.CellValue(column.ColumnName);
头附子(单元);
}
sheetData.AppendChild(headerRow);
foreach(table.Rows中的数据行dsrow)
{
DocumentFormat.OpenXml.Spreadsheet.Row newRow=新DocumentFormat.OpenXml.Spreadsheet.Row();
foreach(列中的字符串列)
{
DocumentFormat.OpenXml.Spreadsheet.Cell=新DocumentFormat.OpenXml.Spreadsheet.Cell();
cell.DataType=DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
cell.CellValue=newdocumentformat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString())//
newRow.AppendChild(单元格);
}
sheetData.AppendChild(纽罗);
}
}
}
}
互操作库速度非常慢,需要花费大量的系统资源
您不必使用互操作库来创建Excel文件,只需使用OpenXML库即可。
我在生产中使用它。超过100万行,将数据集导出到excel文件只需10秒钟
以下是引用的示例代码:
private void ExportDSToExcel(数据集ds,字符串目标)
{
使用(var工作簿=SpreadsheetDocument.Create(目标,DocumentFormat.OpenXml.SpreadsheetDocumentType.工作簿))
{
var workbookPart=workbook.AddWorkbookPart();
workbook.WorkbookPart.workbook=newdocumentformat.OpenXml.Spreadsheet.workbook();
workbook.WorkbookPart.workbook.Sheets=新文档格式.OpenXml.Spreadsheet.Sheets();
uint sheetId=1;
foreach(ds.Tables中的数据表)
{
var sheetPart=workbook.WorkbookPart.AddNewPart();
var sheetData=new DocumentFormat.OpenXml.Spreadsheet.sheetData();
sheetPart.Worksheet=newdocumentformat.OpenXml.Spreadsheet.Worksheet(sheetData);
DocumentFormat.OpenXml.Spreadsheet.Sheets=工作簿.WorkbookPart.workbook.GetFirstChild();
string relationshipId=工作簿.WorkbookPart.GetIdOfPart(sheetPart);
如果(sheets.Elements().Count()>0)
{
床单=
sheets.Elements().Select(s=>s.SheetId.Value).Max()+1;
}
DocumentFormat.OpenXml.Spreadsheet.Sheet Sheet=新的DocumentFormat.OpenXml.Spreadsheet.Sheet(){Id=relationshipId,SheetId=SheetId,Name=table.TableName};
附页(页);
DocumentFormat.OpenXml.Spreadsheet.Row headerRow=新的DocumentFormat.OpenXml.Spreadsheet.Row();
列表列=新列表();
foreach(table.Columns中的DataColumn列)
{
columns.Add(column.ColumnName);
DocumentFormat.OpenXml.Spreadsheet.Cell=新DocumentFormat.OpenXml.Spreadsheet.Cell();
cell.DataType=DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
cell.CellValue=newdocumentformat.OpenXml.Spreadsheet.CellValue(column.ColumnName);
头附子(单元);
}
sheetData.AppendChild(headerRow);
foreach(table.Rows中的数据行dsrow)
{
DocumentFormat.OpenXml.Spreadsheet.Row newRo
private void ExportDSToExcel(DataSet ds, string destination)
{
using (var workbook = SpreadsheetDocument.Create(destination, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))
{
var workbookPart = workbook.AddWorkbookPart();
workbook.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();
workbook.WorkbookPart.Workbook.Sheets = new DocumentFormat.OpenXml.Spreadsheet.Sheets();
uint sheetId = 1;
foreach (DataTable table in ds.Tables)
{
var sheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();
var sheetData = new DocumentFormat.OpenXml.Spreadsheet.SheetData();
sheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(sheetData);
DocumentFormat.OpenXml.Spreadsheet.Sheets sheets = workbook.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>();
string relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart);
if (sheets.Elements<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Count() > 0)
{
sheetId =
sheets.Elements<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Select(s => s.SheetId.Value).Max() + 1;
}
DocumentFormat.OpenXml.Spreadsheet.Sheet sheet = new DocumentFormat.OpenXml.Spreadsheet.Sheet() { Id = relationshipId, SheetId = sheetId, Name = table.TableName };
sheets.Append(sheet);
DocumentFormat.OpenXml.Spreadsheet.Row headerRow = new DocumentFormat.OpenXml.Spreadsheet.Row();
List<String> columns = new List<string>();
foreach (DataColumn column in table.Columns)
{
columns.Add(column.ColumnName);
DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(column.ColumnName);
headerRow.AppendChild(cell);
}
sheetData.AppendChild(headerRow);
foreach (DataRow dsrow in table.Rows)
{
DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row();
foreach (String col in columns)
{
DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;
cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); //
newRow.AppendChild(cell);
}
sheetData.AppendChild(newRow);
}
}
}
}