c#上万级数据二维数组数据导出到excel,先选择文件地址,再将文件保存到指定地址,使用OpenXML SDK库进行Excel文件的生成速度优化,代码示例
时间: 2024-03-21 20:41:04 浏览: 144
好的,下面是一个简单的示例代码,演示如何使用 C# 和 OpenXML SDK 库将二维数组的数据导出到 Excel 文件中。
```csharp
using System;
using System.IO;
using System.Threading.Tasks;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
namespace ExcelExportDemo
{
class Program
{
static void Main(string[] args)
{
// 使用 OpenFileDialog 控件选择文件地址
var openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 使用 SaveFileDialog 控件选择保存文件地址
var saveFileDialog = new SaveFileDialog();
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
// 读取二维数组数据
var data = GetData();
// 使用 OpenXML SDK 库创建 Excel 文件
CreateExcelFile(saveFileDialog.FileName, data);
}
}
}
static void CreateExcelFile(string fileName, string[,] data)
{
// 创建一个新的 Excel 文件
var spreadsheetDocument = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook);
// 添加 WorkbookPart 到新的 Excel 文件
var workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
// 添加 WorksheetPart 到 WorkbookPart
var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// 获取 WorksheetPart 中的 SheetData
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
// 添加表头行
var headerRow = new Row();
for (int i = 0; i < data.GetLength(1); i++)
{
var cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue($"Column{i + 1}");
headerRow.AppendChild(cell);
}
sheetData.AppendChild(headerRow);
// 添加数据行
for (int i = 0; i < data.GetLength(0); i++)
{
var dataRow = new Row();
for (int j = 0; j < data.GetLength(1); j++)
{
var cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(data[i, j]);
dataRow.AppendChild(cell);
}
sheetData.AppendChild(dataRow);
}
// 保存 Excel 文件
worksheetPart.Worksheet.Save();
workbookPart.Workbook.Save();
spreadsheetDocument.Close();
}
static string[,] GetData()
{
// 模拟数据源,这里使用一个 10000x10 的二维数组
var data = new string[10000, 10];
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
data[i, j] = $"{i}, {j}";
}
}
return data;
}
}
}
```
在这个示例代码中,我们首先使用 OpenFileDialog 控件让用户选择要导出的文件地址,然后使用 SaveFileDialog 控件让用户选择保存文件的地址。接着,我们读取二维数组数据,并使用 OpenXML SDK 库创建 Excel 文件。
在 CreateExcelFile 方法中,我们首先创建一个新的 Excel 文件,并添加 WorkbookPart 到该文件中。然后,我们添加 WorksheetPart 到 WorkbookPart 中,并获取 WorksheetPart 中的 SheetData。接着,我们添加表头行和数据行到 SheetData 中。最后,我们保存 Excel 文件,并关闭 SpreadsheetDocument。
需要注意的是,由于二维数组数据可能非常大,如果一次性将所有数据写入 Excel 文件中,可能会导致内存溢出。因此,我们可以使用多个线程来分块写入数据,从而提高生成速度。在实际应用中,你可以根据具体情况来选择最合适的多线程方案。
阅读全文