下面给您详细讲解C#中的Excel导入和导出的完整攻略。
导入Excel
使用第三方库
要导入Excel文件到C#程序中,常用的做法是使用第三方库。其中比较常用的库有:
-
NPOI:NPOI是C#的开源库,用于按照Microsoft Office的公开标准读写Excel文件。功能强大,支持.xls、.xlsx、.ppt、.pptx、.doc和.docx等Office文件格式。此外,NPOI还支持Word/Excel的图表、图片等功能。
-
EPPlus:EPPlus是C#的开源库,用于按照Microsoft Office的公开标准读写Excel 2007/2010/2013/2016/2019文件(.xlsx、.xlsm)。内部使用OpenXml SDK。使用起来比NPOI更加简单。
下面是使用NPOI读取Excel文件的示例代码:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
static void Main(string[] args)
{
string filePath = @"C:\example.xlsx";
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = (XSSFSheet)workbook.GetSheet("Sheet1");
if (sheet != null)
{
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
if (row != null)
{
string cell1 = row.GetCell(0) != null ? row.GetCell(0).ToString() : "";
string cell2 = row.GetCell(1) != null ? row.GetCell(1).ToString() : "";
string cell3 = row.GetCell(2) != null ? row.GetCell(2).ToString() : "";
Console.WriteLine($"第{i+1}行数据:{cell1}、{cell2}、{cell3}");
}
}
}
workbook.Close();
}
}
上面的代码使用了NPOI的XSSFWorkbook和XSSFSheet类读取Excel文件数据。其中,XSSFWorkbook
表示整个Excel工作簿,XSSFSheet
表示工作簿中的表格,IRow
表示Excel表格中的行,ICell
表示Excel行中的单元格。通过代码可以看到,我们可以根据行和列的下标获取Excel表格中的单元格数据,然后进行进一步处理。
如果您使用了EPPlus库,则需要调用其提供的类和方法进行Excel读取。下面是使用EPPlus读取Excel文件的示例代码:
using OfficeOpenXml;
using System.IO;
static void Main(string[] args)
{
string filePath = @"C:\example.xlsx";
using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
if (worksheet != null)
{
for (int i = 2; i <= worksheet.Dimension.End.Row; i++)
{
string cell1 = worksheet.Cells[i, 1].Value?.ToString() ?? "";
string cell2 = worksheet.Cells[i, 2].Value?.ToString() ?? "";
string cell3 = worksheet.Cells[i, 3].Value?.ToString() ?? "";
Console.WriteLine($"第{i}行数据:{cell1}、{cell2}、{cell3}");
}
}
}
}
可以看到,使用EPPlus读取Excel文件的代码也比较简洁,与上面使用NPOI的代码有一些区别,不过逻辑相同。
使用OleDbDataReader读取Excel文件
除了使用第三方库,我们还可以使用OleDbDataReader读取Excel文件数据。下面是使用OleDbDataReader读取Excel文件数据的示例代码:
using System.Data.OleDb;
using System.IO;
static void Main(string[] args)
{
string connectionString = $@"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=C:\example.xlsx;
Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'";
string commandText = "SELECT * FROM [Sheet1$]";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
using (OleDbCommand command = new OleDbCommand(commandText, connection))
{
using (OleDbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string cell1 = reader[0] != null ? reader[0].ToString() : "";
string cell2 = reader[1] != null ? reader[1].ToString() : "";
string cell3 = reader[2] != null ? reader[2].ToString() : "";
Console.WriteLine($"第{reader.Depth+1}行数据:{cell1}、{cell2}、{cell3}");
}
}
}
}
}
上面的代码中,connectionString
表示OleDb连接字符串,commandText
表示查询表格中的全部数据。我们可以看到,使用OleDbDataReader也可以轻松地读取Excel文件数据。
导出Excel
要将C#程序中的数据导出到Excel文件中,我们一般也会使用第三方库来实现。常用的库包括:
- NPOI
- EPPlus
- ClosedXML:ClosedXML是C#的开源库,用于按照Microsoft Office的公开标准读写Excel文件,支持.xls、.xlsx文件,比NPOI和EPPlus更加易用。
下面是使用NPOI将数据导出到Excel文件的示例代码:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
static void Main(string[] args)
{
string filePath = @"C:\export.xlsx";
using (FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("Sheet1");
sheet.CreateRow(0).CreateCell(0).SetCellValue("姓名");
sheet.GetRow(0).CreateCell(1).SetCellValue("年龄");
sheet.GetRow(0).CreateCell(2).SetCellValue("性别");
sheet.CreateRow(1).CreateCell(0).SetCellValue("张三");
sheet.GetRow(1).CreateCell(1).SetCellValue(18);
sheet.GetRow(1).CreateCell(2).SetCellValue("男");
sheet.CreateRow(2).CreateCell(0).SetCellValue("李四");
sheet.GetRow(2).CreateCell(1).SetCellValue(20);
sheet.GetRow(2).CreateCell(2).SetCellValue("女");
workbook.Write(file);
workbook.Close();
}
}
上面的代码中,我们使用了NPOI的XSSFWorkbook、XSSFSheet、IRow、ICell等类来创建Excel工作簿、表格、行和单元格,并且给单元格设置了值。最后将Excel工作簿内容写入到文件中。
使用EPPlus导出Excel文件的方法与上面类似,下面是示例代码:
using OfficeOpenXml;
using System.IO;
static void Main(string[] args)
{
string filePath = @"C:\export.xlsx";
using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells[1, 1].Value = "姓名";
worksheet.Cells[1, 2].Value = "年龄";
worksheet.Cells[1, 3].Value = "性别";
worksheet.Cells[2, 1].Value = "张三";
worksheet.Cells[2, 2].Value = 18;
worksheet.Cells[2, 3].Value = "男";
worksheet.Cells[3, 1].Value = "李四";
worksheet.Cells[3, 2].Value = 20;
worksheet.Cells[3, 3].Value = "女";
package.Save();
}
}
使用ClosedXML导出Excel文件的方法也比较简单,下面是示例代码:
using ClosedXML.Excel;
using System.IO;
static void Main(string[] args)
{
string filePath = @"C:\export.xlsx";
using (XLWorkbook workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cell(1, 1).Value = "姓名";
worksheet.Cell(1, 2).Value = "年龄";
worksheet.Cell(1, 3).Value = "性别";
worksheet.Cell(2, 1).Value = "张三";
worksheet.Cell(2, 2).Value = 18;
worksheet.Cell(2, 3).Value = "男";
worksheet.Cell(3, 1).Value = "李四";
worksheet.Cell(3, 2).Value = 20;
worksheet.Cell(3, 3).Value = "女";
workbook.SaveAs(filePath);
}
}
以上就是C#中的Excel导入和导出的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#的Excel导入、导出 - Python技术站