千家信息网

C#逐行读取excel所有内容

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,using System;using System.Collections.Generic;using System.Linq;using System.Text;using NPOI.SS.User
千家信息网最后更新 2024年11月30日C#逐行读取excel所有内容

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using NPOI.SS.UserModel;

using NPOI.HSSF.UserModel;

using System.IO;


namespace www.xinduofen.cn

{

class NpoiOperateExcel

{

///

/// 逐行读取某一个excel文件的某一个工作表有效范围内的全部内容,如果某个单元格中无内容,则将以空字符串形式填写到List《string》的相应位置,以string.IsNullOrEmpty(str)形式判断是否为空即可

///

/// 代表excel表格保存的地址,包括"文件名.xls"

/// 代表将要读取的sheet表的索引位置

/// 返回 "不为空" 代表读取成功,否则为读取失败;读取数据list《string》代表一行数据,有多少个就代表有多行数据(所有行左对齐)

public static List> rowReadAll(string save_address, int sheet_number)//读取excel表格相应工作表的所有数据

{

List> data = null;



//如果传入参数合法

if (!string.IsNullOrEmpty(save_address) && sheet_number > 0){

int rowAllCnt = NpoiOperateExcel.rowORcolAllCount(save_address,sheet_number,true);

int colAllCnt = NpoiOperateExcel.rowORcolAllCount(save_address,sheet_number,false);


data = NpoiOperateExcel.rowReadSection(save_address, 1, rowAllCnt, 1, colAllCnt, sheet_number);

}


return data;

}


public static int rowORcolAllCount(string save_address, int sheet_number, Boolean readFlag)//读取excel表格相应工作表的所有数据

{

int rowORcolCnt = -1;//初始化为-1

FileStream readfile = null;


try

{

//如果传入参数合法

if (!string.IsNullOrEmpty(save_address) && sheet_number > 0)

{

readfile = new FileStream(save_address, FileMode.Open, FileAccess.Read);

HSSFWorkbook hssfworkbook = new HSSFWorkbook(readfile);

ISheet sheet = hssfworkbook.GetSheetAt(sheet_number - 1);

if (sheet != null)

{

if (readFlag)//如果需要读取'有效行数'

{

rowORcolCnt = sheet.LastRowNum+1;//有效行数(NPOI读取的有效行数不包括列头,所以需要加1)

}

else

{ //如果需要读取'最大有效列数'

for (int rowCnt = sheet.FirstRowNum; rowCnt <= sheet.LastRowNum; rowCnt++)//迭代所有行

{

IRow row = sheet.GetRow(rowCnt);

if (row != null && row.LastCellNum > rowORcolCnt)

{

rowORcolCnt = row.LastCellNum;

}

}

}

}

}

}

catch (Exception)

{

Console.WriteLine("NpoiOperateExcel.rowOrColumnAllCount方法产生了异常!");

}

finally

{

if (readfile != null) { readfile.Close(); }

}



return rowORcolCnt;

}


public static List> rowReadSection(string save_address, int start_row, int stop_row,

int sart_column, int stop_column, int sheet_number)//读取excel表格相应工作表的部分数据

{

List> data = null;//初始化为空

FileStream readfile = null;


try

{

//如果传入参数合法

if (!string.IsNullOrEmpty(save_address) && start_row > 0 && stop_row > 0 && sart_column > 0 && stop_column>0 && sheet_number > 0)

{

readfile = new FileStream(save_address, FileMode.Open, FileAccess.Read);

HSSFWorkbook hssfworkbook = new HSSFWorkbook(readfile);

ISheet sheet = hssfworkbook.GetSheetAt(sheet_number - 1);

if (sheet != null)

{

for (int rowIndex = start_row - 1; rowIndex < stop_row; rowIndex++)

{

IRow row = sheet.GetRow(rowIndex);

if (row != null)

{

List oneRow = new List();


for (int columnIndex = sart_column - 1; columnIndex < stop_column; columnIndex++)

{

ICell cell = row.GetCell(columnIndex);

if (cell != null)

{

oneRow.Add(cell.StringCellValue);

}

else {

oneRow.Add("");//填充空的数据

}

}


if (data == null)

{

data = new List>();//初始化

}

data.Add(oneRow);

}

else {

List oneRow = new List();//软件为相应位置空行创建内存中的空数据行

for (int columnIndex = sart_column - 1; columnIndex < stop_column; columnIndex++)

{

oneRow.Add("");//填充空的数据

}

if (data == null)

{

data = new List>();//初始化

}

data.Add(oneRow);

}

}

}

}

}

catch (Exception)

{

Console.WriteLine("NpoiOperateExcel.rowReadSection方法产生了异常!");

}

finally

{

if (readfile != null) { readfile.Close(); }

}



return data;

}

}

}

内容所有权属于:北京继豪电子(专业研究体质测试仪器)

0