using DevComponents.DotNetBar;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CSharpExcelHandle
{
/// <summary>
/// Excel工具类
/// </summary>
public static class ExcelUtils
{
/// <summary>
/// Excel某sheet中内容导入到DataTable中
/// 区分xsl和xslx分别处理
/// </summary>
/// <param name="filePath">Excel文件路径,含文件全名</param>
/// <returns></returns>
public static DataTable ExcelSheetImportToDataTable(string filePath)
{
DataTable dt = new DataTable();
IWorkbook hssfworkbook;
if (Path.GetExtension(filePath).ToLower() == ".xls".ToLower())
{//.xls
#region .xls文件处理:HSSFWorkbook
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
}
catch (Exception e)
{
throw e;
}
//ISheet sheet = hssfworkbook.GetSheet(sheetName);//Excel的名称
ISheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
//第二行最后一个方格的编号 即总的列数
for (int j = 0; j < (sheet.GetRow(1).LastCellNum); j++)
{
//设置每一列的名字
HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
}
while (rows.MoveNext())
{
IRow row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
if (row.RowNum == 0) continue;//第一行为标题,不需要导入
for (int i = 0; i < row.LastCellNum; i++)
{
if (i >= dt.Columns.Count)//每条记录的单元格数量不能大于表格栏位数量
{
break;
}
ICell cell = row.GetCell(i);
if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
{
break;
}
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();
}
}
dt.Rows.Add(dr);
}
#endregion
}
C#中Excel数据导入导出
最新推荐文章于 2024-09-10 16:35:37 发布
本文详细介绍了如何使用C#进行Excel数据的导入和导出操作,包括读取Excel文件、写入数据到Excel以及处理不同版本Excel格式的技巧,适合C#开发者在处理Excel数据时参考。
摘要由CSDN通过智能技术生成