使用NPOI可以在没有安装Office或者相应环境的机器上对Excel文档进行读写。其下载地址为:http://npoi.codeplex.com/releases
一、读取Excel文件:
// 定义要读取的Excel文件地址
string excel = @"C:\test.xls";
// 定义要写入的数据表
DataTable dataTable = new DataTable();
// 创建Excel文件流
FileStream fileStream = new FileStream(excel, FileMode.Open, FileAccess.Read);
// 通过Excel文件流创建NPOI的Excel操作对象
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileStream);
// 关闭Excel文件流
fileStream.Close();
// 获取Excel工作表
ISheet sheet = hssfWorkbook.GetSheetAt(0);
// 获取Excel工作表的行枚举对象
IEnumerator rows = sheet.GetRowEnumerator();
// 是否存在第一行
if (rows.MoveNext())
{
// 获取第一行
HSSFRow hssfRow = (HSSFRow)rows.Current;
// 遍历行数据设置数据表列名
for (int j = 0, length = hssfRow.LastCellNum; j < length; j++)
{
// 获取单元格
ICell cell = hssfRow.GetCell(j);
if (cell != null)
{
// 设置数据表列名
dataTable.Columns.Add(cell.ToString());
}
}
// 循环获取行数据
while (rows.MoveNext())
{
// 获取当前行
hssfRow = (HSSFRow)rows.Current;
// 创建数据表行
DataRow dataRow = dataTable.NewRow();
// 遍历行数据设置数据表行数据
for (int i = 0, length = hssfRow.LastCellNum; i < length; i++)
{
// 获取单元格
ICell cell = hssfRow.GetCell(i);
if (cell != null)
{
// 设置数据表行数据
dataRow[i] = cell.ToString();
}
}
// 添加数据行到数据表中
dataTable.Rows.Add(dataRow);
}
}
// 关闭NPOI的Excel操作对象
hssfWorkbook.Close();
二、写入Excel文件:
// 定义要读取的数据表
DataTable dataTable = new DataTable();
// 定义要写入的Excel文件地址
string excel = @"C:\test.xls";
// 创建NPOI的Excel操作对象
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
// 根据数据表名创建Excel工作表
ISheet sheet = hssfWorkbook.CreateSheet(dataTable.TableName);
// 创建工作表第一行
IRow row = sheet.CreateRow(0);
// 遍历数据表列名写入工作表第一行
for (int i = 0, length = dataTable.Columns.Count; i < length; i++)
{
// 创建工作表单元格并写入列名
row.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName);
}
// 遍历数据表行数据写入工作表
for (int i = 0, iLength = dataTable.Rows.Count; i < iLength; i++)
{
//创建工作表数据行
IRow row2 = sheet.CreateRow(i + 1);
// 遍历行数据写入工作表
for (int j = 0, jLength = dataTable.Columns.Count; j < jLength; j++)
{
// 获取数据
object value = dataTable.Rows[i][j];
// 创建单元格
ICell cell = row2.CreateCell(j);
// 设置单元格数据
if (value == null)
{
cell.SetCellValue("");
}
else
{
cell.SetCellValue(value.ToString());
}
}
}
// 创建Excel文件流
FileStream fileStream = new FileStream(excel, FileMode.Create, FileAccess.Write);
// 将Excel数据写入文件流
hssfWorkbook.Write(fileStream);
// 将文件流数据写入到文件中
fileStream.Flush();
// 关闭Excel文件流
fileStream.Close();
// 关闭NPOI的Excel操作对象
hssfWorkbook.Close();
更多信息请参阅:NPOI – Home