Excel表导入DataTable
public static DataTable ExcelToDataTable(string filePath, string sheetName, bool isFirstRowColumn, int fRow, int fColumn,
int lColumn)
{
DataTable dataTable=new DataTable();
IWorkbook workbook = null;
ISheet sheet = null;
int startRow;
int ascci = 65;
if (filePath != null)
{
//创建文件流
fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (filePath.IndexOf(".xlsx")>0)
workbook = new XSSFWorkbook(fs);//获取工作簿 新版本的Excel 文件名后缀.xlsx
else if (filePath.IndexOf(".xls")>0)
workbook = new HSSFWorkbook(fs);//获取工作簿 旧版本的Excel 文件名后缀.xls
fs.Close();
}
if (sheetName != null)
{
sheet = workbook.GetSheet(sheetName);//获取指定表
if (sheet == null)
sheet = workbook.GetSheetAt(0);//获取工作簿的第一张表
}
else
{
sheet = workbook.GetSheetAt(0);//获取工作簿的第一张表
}
if (sheet != null)
{
//为dataTable创建列,列名为对应的ascci码,从A-Z
for (int i = fColumn; i <= lColumn; i++)
{
DataColumn dataColumn = new DataColumn(((char)ascci++).ToString());
dataTable.Columns.Add(dataColumn);
}
//判断表的首行是否为列名,当首行为列名时,选择从第二行开始读取数据
if (isFirstRowColumn)
startRow = fRow + 1;
else
startRow = fRow;
for (int i = startRow; i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);//获取sheet表的第i行
if(row==null)
continue;
DataRow dataRow = dataTable.NewRow();//为dataTable创建新的一行
int m = 0;
//接下来为dataTable的单元格赋值
for (int j = fColumn; j <= lColumn; j++)
{
if (row.GetCell(j) == null)
dataRow[m++] = "";
if (row.GetCell(j) != null)
{
ICell cell = row.GetCell(j);//获取sheet表第i行第j列单元格的数据值
//判断cell这个值是 具体数值or公式 加这个判断的原因:当单元格为公式时,dataTable读取的就是公式,加了判断,能得到公式的结果
if (cell.CellType == CellType.Formula)//cell内容为公式
{
cell.SetCellType(CellType.String);//转换为string类型,得到具体值,即公式计算出来的值
dataRow[m++] = cell.StringCellValue;
}
else
{
dataRow[m++] = cell.ToString();
}
}
}
dataTable.Rows.Add(dataRow);
}
}
return dataTable;
}
DataTable导出Excel表
public static void DataTableToExcel(string filePath,DataTable dataTable)
{
IWorkbook workbook = null;
ISheet sheet = null;
if (filePath != null)
{
//根据不同路径的文件名,生成不同版本的Excel工作簿
if (filePath.IndexOf(".xlsx") > 0)
workbook = new XSSFWorkbook();//新版Excel工作簿
else if (filePath.IndexOf(".xls") > 0)
workbook = new HSSFWorkbook();//旧版Excel工作簿
}
//为工作簿创建sheet表,并对其进行命名
sheet = workbook.CreateSheet("调度结果");
for (int i = 0; i < dataTable.Rows.Count; i++)
{
//在sheet表中创建第i行
IRow iRow = sheet.CreateRow(i);
for (int j = 0; j < dataTable.Columns.Count; j++)
{
double temp;
//将dataTable中数值类型的数据转换为double类型
if(double.TryParse(dataTable.Rows[i][j].ToString(),out temp))
iRow.CreateCell(j).SetCellValue(temp);//在sheet表的第i行创建第j列,并为其赋值
else
iRow.CreateCell(j).SetCellValue(dataTable.Rows[i][j].ToString());
}
}
//创建文件流
using (fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);//将工作簿写入文件流
}
}