在.NET开发中,与Excel文件的交互是常见的需求。无论是读取数据还是写入数据,高效的数据交互对于提高开发效率和软件性能至关重要。本文将揭秘实现.NET与Excel高效数据交互的五大秘籍,帮助开发者轻松应对各种数据交互场景。
秘籍一:使用OpenXml库进行读写操作
OpenXml是Microsoft提供的一个用于读写Office文档的库,它支持.NET Framework和.NET Core。使用OpenXml库,可以方便地实现与Excel文件的交互。
1.1 读取Excel文件
以下是一个使用OpenXml读取Excel文件的示例代码:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
public void ReadExcel(string filePath)
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePath, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
SheetPart sheetPart = workbookPart.GetSheetPart(1);
Worksheet worksheet = sheetPart.Worksheet;
foreach (Row row in worksheet.Rows)
{
foreach (Cell cell in row.Cells)
{
// 获取单元格的值
string cellValue = GetCellValue(cell);
Console.WriteLine(cellValue);
}
}
}
}
private string GetCellValue(Cell cell)
{
// 根据单元格的类型获取值
switch (cell.DataType)
{
case CellValues.SharedString:
return cell.InnerText;
case CellValues.Number:
return cell.InnerText;
default:
return cell.InnerText;
}
}
1.2 写入Excel文件
以下是一个使用OpenXml写入Excel文件的示例代码:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
public void WriteExcel(string filePath, string[,] data)
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = doc.AddWorkbookPart();
workbookPart.Workbook = new Workbook(new Sheets());
SheetPart sheetPart = workbookPart.AddNewPart<SheetPart>();
sheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = workbookPart.Workbook.GetFirstChild<Sheets>();
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(sheetPart), SheetId = 1, Name = "Sheet1" };
sheets.Append(sheet);
WorkbookPart.Workbook.Save();
}
}
秘籍二:使用NPOI库进行读写操作
NPOI是一个开源的.NET库,它提供了对Excel和Word文档的读写支持。使用NPOI库,可以方便地实现与Excel文件的交互。
2.1 读取Excel文件
以下是一个使用NPOI读取Excel文件的示例代码:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
public void ReadExcel(string filePath)
{
using (IWorkbook workbook = new XSSFWorkbook(filePath))
{
ISheet sheet = workbook.GetSheetAt(0);
IRow row;
ICell cell;
for (int r = 0; r <= sheet.LastRowNum; r++)
{
row = sheet.GetRow(r);
if (row != null)
{
for (int c = 0; c < row.LastCellNum; c++)
{
cell = row.GetCell(c);
if (cell != null)
{
// 获取单元格的值
string cellValue = GetCellValue(cell);
Console.WriteLine(cellValue);
}
}
}
}
}
}
private string GetCellValue(ICell cell)
{
// 根据单元格的类型获取值
switch (cell.CellType)
{
case CellType.String:
return cell.StringCellValue;
case CellType.Numeric:
return cell.NumericCellValue.ToString();
default:
return cell.ToString();
}
}
2.2 写入Excel文件
以下是一个使用NPOI写入Excel文件的示例代码:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
public void WriteExcel(string filePath, string[,] data)
{
using (IWorkbook workbook = new XSSFWorkbook())
{
ISheet sheet = workbook.CreateSheet("Sheet1");
for (int r = 0; r < data.GetLength(0); r++)
{
IRow row = sheet.CreateRow(r);
for (int c = 0; c < data.GetLength(1); c++)
{
ICell cell = row.CreateCell(c);
cell.SetCellValue(data[r, c]);
}
}
using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
workbook.Write(fileStream);
}
}
}
秘籍三:使用ExcelDataReader库进行读写操作
ExcelDataReader是一个轻量级的.NET库,它支持读取Excel文件。使用ExcelDataReader库,可以方便地实现与Excel文件的交互。
3.1 读取Excel文件
以下是一个使用ExcelDataReader读取Excel文件的示例代码:
using ExcelDataReader;
public void ReadExcel(string filePath)
{
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
var result = reader.AsDataSet();
foreach (DataTable table in result.Tables)
{
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
// 获取单元格的值
string cellValue = row[column].ToString();
Console.WriteLine(cellValue);
}
}
}
}
}
}
3.2 写入Excel文件
ExcelDataReader目前只支持读取Excel文件,不支持写入操作。
秘籍四:使用Microsoft.Office.Interop.Excel进行读写操作
Microsoft.Office.Interop.Excel是一个COM库,它提供了对Excel文件的读写支持。使用Microsoft.Office.Interop.Excel库,可以方便地实现与Excel文件的交互。
4.1 读取Excel文件
以下是一个使用Microsoft.Office.Interop.Excel读取Excel文件的示例代码:
using Microsoft.Office.Interop.Excel;
public void ReadExcel(string filePath)
{
Application application = new Application();
Workbook workbook = application.Workbooks.Open(filePath);
Worksheet worksheet = workbook.Sheets[1];
for (int r = 1; r <= worksheet.UsedRange.Rows.Count; r++)
{
for (int c = 1; c <= worksheet.UsedRange.Columns.Count; c++)
{
// 获取单元格的值
string cellValue = worksheet.Cells[r, c].Value.ToString();
Console.WriteLine(cellValue);
}
}
workbook.Close();
application.Quit();
}
4.2 写入Excel文件
以下是一个使用Microsoft.Office.Interop.Excel写入Excel文件的示例代码:
using Microsoft.Office.Interop.Excel;
public void WriteExcel(string filePath, string[,] data)
{
Application application = new Application();
Workbook workbook = application.Workbooks.Add();
Worksheet worksheet = workbook.Sheets[1];
for (int r = 1; r <= data.GetLength(0); r++)
{
for (int c = 1; c <= data.GetLength(1); c++)
{
worksheet.Cells[r, c].Value = data[r, c];
}
}
workbook.SaveAs(filePath);
workbook.Close();
application.Quit();
}
秘籍五:使用Aspose.Cells库进行读写操作
Aspose.Cells是一个功能强大的.NET库,它提供了对Excel文件的读写支持。使用Aspose.Cells库,可以方便地实现与Excel文件的交互。
5.1 读取Excel文件
以下是一个使用Aspose.Cells读取Excel文件的示例代码:
using Aspose.Cells;
public void ReadExcel(string filePath)
{
Workbook workbook = new Workbook(filePath);
Worksheet worksheet = workbook.Worksheets[0];
for (int r = 0; r < worksheet.Rows.Count; r++)
{
for (int c = 0; c < worksheet.Columns.Count; c++)
{
// 获取单元格的值
string cellValue = worksheet.Cells[r, c].Value.ToString();
Console.WriteLine(cellValue);
}
}
}
5.2 写入Excel文件
以下是一个使用Aspose.Cells写入Excel文件的示例代码:
using Aspose.Cells;
public void WriteExcel(string filePath, string[,] data)
{
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
for (int r = 0; r < data.GetLength(0); r++)
{
for (int c = 0; c < data.GetLength(1); c++)
{
worksheet.Cells[r, c].Value = data[r, c];
}
}
workbook.Save(filePath);
}
总结
本文介绍了实现.NET与Excel高效数据交互的五大秘籍,包括使用OpenXml、NPOI、ExcelDataReader、Microsoft.Office.Interop.Excel和Aspose.Cells等库进行读写操作。这些库都具有各自的特点和优势,开发者可以根据实际需求选择合适的库来实现数据交互。
