NPOI.dll文件下载:
NPOI介绍:
NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。
NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。
实现的操作:
获取Word文档所有Sheet表格。
读取指定表格数据返回DataTable。
cs
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("读取Word文档所有SheetName↓↓↓↓↓");
//文档存放路径
string path = System.Windows.Forms.Application.StartupPath + "//初始数据.xls";
//获取Word文档里所有Sheet表格
List<string> strList = GetSheetStr(path);
for (int i = 0; i < strList.Count; i++)
{
Console.WriteLine((i + 1) + ":" + strList[i]);
}
Console.Write("请输入要查看的Sheet表格编号:");
int number = Convert.ToInt32(Console.ReadLine());
DataTable dt = SheetToDataTable(path, strList[number - 1]);
foreach (DataRow row in dt.Rows)
{
int column = row.ItemArray.Length;
string str = "";
for (int i = 0; i < column; i++)
{
str += " | " + row[i];
}
Console.WriteLine(str);
}
Console.ReadKey();
}
/// <summary>
/// 获取Word文档内所有SheetName
/// </summary>
/// <param name="path">读取路径</param>
/// <returns>返回:字符串集合</returns>
static List<string> GetSheetStr(string path)
{
List<string> strSheetName = new List<string>();
IWorkbook workbook;
string fileExt = Path.GetExtension(path).ToLower();
ISheet sheet;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
//if (fileExt == ".xlsx")
//{
// workbook = new XSSFWorkbook(fs);
//}
//else
if (fileExt == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else
{
workbook = null;
}
if (workbook == null)
{
return null;
}
//后去Sheet表格数量
int count = workbook.NumberOfSheets;
for (int i = 0; i < count; i++)
{
sheet = workbook.GetSheetAt(i);
//检查Sheet表格总行数是否大于0
//检查是否有数据,有就获取Sheet表格名称 根据个人需求不加也可以
if (sheet.LastRowNum > 0)
{
strSheetName.Add(workbook.GetSheetAt(i).SheetName);
}
}
return strSheetName;
}
}
/// <summary>
/// 读取Sheet内容
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="sheetName">获取Sheet名称</param>
/// <returns>返回DataTable</returns>
public static DataTable SheetToDataTable(string filePath, string sheetName)
{
System.Data.DataTable dt = new System.Data.DataTable();
NPOI.SS.UserModel.IWorkbook workbook;
string fileExt = Path.GetExtension(filePath).ToLower();
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
//XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;
//HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
//if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); }
//else
if (fileExt == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else
{
workbook = null;
}
if (workbook == null)
{
return null;
}
ISheet sheet = workbook.GetSheet(sheetName);
//表头
//读取第一行的标题
IRow header = sheet.GetRow(sheet.FirstRowNum);
List<int> columns = new List<int>();
for (int i = 0; i < header.LastCellNum; i++)
{
//获取标题名称 例如:ID、Name、Age
object columnName = GetValueType(header.GetCell(i));
if (columnName == null || columnName.ToString() == string.Empty)
{
dt.Columns.Add(new DataColumn("Columns" + i.ToString()));
}
else
dt.Columns.Add(new DataColumn(columnName.ToString()));
columns.Add(i);
}
//数据
for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
{
DataRow dataRow = dt.NewRow();
bool hasValue = false;
foreach (int k in columns)
{
dataRow[k] = GetValueType(sheet.GetRow(i).GetCell(k));
if (dataRow[k] != null && dataRow[k].ToString() != string.Empty)
{
hasValue = true;
}
}
if (hasValue)
{
dt.Rows.Add(dataRow);
}
}
}
}
return dt;
}
/// <summary>
/// 获取单元格内数据的类型
/// </summary>
/// <param name="cell"></param>
/// <returns></returns>
private static object GetValueType(ICell cell)
{
if (cell == null)
return null;
switch (cell.CellType)
{
case CellType.Blank:
return null;
case CellType.Boolean:
return cell.BooleanCellValue;
case CellType.Numeric:
return cell.NumericCellValue;
case CellType.String:
return cell.StringCellValue;
case CellType.Error:
return cell.ErrorCellValue;
case CellType.Formula:
default:
return "=" + cell.CellFormula;
}
}
}
}