在C#中,可以使用第三方库来实现Excel表的读写。以下是一些常用的方法:
- 使用EPPlus库:EPPlus是一个开源的.NET库,用于操作Excel文件。它支持读取和写入各种类型的Excel文件,包括.xlsx和.xls格式。要使用EPPlus库,首先需要安装它。可以通过NuGet包管理器来安装。
安装命令:
Install-Package EPPlus
使用示例:
using OfficeOpenXml;
// 读取Excel文件
using (ExcelPackage package = new ExcelPackage(new FileInfo("example.xlsx")))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
for (int row = 1; row <= worksheet.Dimension.Rows; row++)
{
for (int col = 1; col <= worksheet.Dimension.Columns; col++)
{
Console.Write(worksheet.Cells[row, col].Value + "\t");
}
Console.WriteLine();
}
}
// 写入Excel文件
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells[1, 1].Value = "Hello";
worksheet.Cells[2, 1].Value = "World";
package.SaveAs(new FileInfo("output.xlsx"));
}
- 使用NPOI库:NPOI是一个用于操作Microsoft Office文档的.NET库,包括Excel。要使用NPOI库,首先需要安装它。可以通过NuGet包管理器来安装。
安装命令:
Install-Package NPOI
使用示例:
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
// 读取Excel文件(.xls格式)
using (FileStream file = new FileStream("example.xls", FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(file);
ISheet sheet = workbook.GetSheetAt(0);
for (int i = 0; i < sheet.PhysicalNumberOfRows; i++)
{
for (int j = 0; j < sheet.GetRow(i).PhysicalNumberOfCells; j++)
{
Console.Write(sheet.GetRow(i).GetCell(j).ToString() + "\t");
}
Console.WriteLine();
}
}
// 写入Excel文件(.xls格式)
using (FileStream file = new FileStream("output.xls", FileMode.CreateNew, FileAccess.Write))
{
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
sheet.CreateRow(0).CreateCell(0).SetCellValue("Hello");
sheet.CreateRow(1).CreateCell(0).SetCellValue("World");
workbook.Write(file);
}
- 使用Microsoft.Office.Interop.Excel库:这个库允许直接调用Microsoft Office应用程序,包括Excel。要使用这个库,首先需要在项目中添加对Microsoft.Office.Interop.Excel的引用。然后,可以使用以下代码来读取和写入Excel文件:
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// 读取Excel文件
Application excelApp = new Application();
Workbook excelWorkbook = excelApp.Workbooks.Open("example.xlsx");
_Worksheet excelWorksheet = (_Worksheet)excelWorkbook.Sheets[1];
for (int row = 1; row <= excelWorksheet.UsedRange.Rows.Count; row++)
{
for (int col = 1; col <= excelWorksheet.UsedRange.Columns.Count; col++)
{
Console.Write(excelWorksheet.Cells[row, col].Value2 + "\t");
}
Console.WriteLine();
}
excelWorkbook.Close();
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
Marshal.ReleaseComObject(excelWorkbook);
Marshal.ReleaseComObject(excelWorksheet);
// 写入Excel文件
excelApp = new Application();
excelWorkbook = excelApp.Workbooks.Add();
excelWorksheet = (_Worksheet)excelWorkbook.Sheets[1];
excelWorksheet.Cells[1, 1].Value2 = "Hello";
excelWorksheet.Cells[2, 1].Value2 = "World";
excelWorkbook.SaveAs("output.xlsx");
excelWorkbook.Close();
excelApp.Quit();
Marshal.ReleaseComObject(excelApp);
Marshal.ReleaseComObject(excelWorkbook);
Marshal.ReleaseComObject(excelWorksheet);
- 使用CSV文件,如果Excel文件较简单,你可以将其另存为CSV格式,然后使用C#的文本文件处理功能来读取和写入CSV文件。
- 读取CSV文件:
csharpstring[] lines = File.ReadAllLines("example.csv");
foreach (string line in lines)
{
string[] values = line.Split(',');
// 处理每一行的值
}
- 写入CSV文件:
csharpList<string> lines = new List<string>();
// 添加CSV行
lines.Add("Column1,Column2,Column3");
// 添加数据行
lines.Add("Value1,Value2,Value3");
// 写入CSV文件
File.WriteAllLines("output.csv", lines);