泽兴芝士网

一站式 IT 编程学习资源平台

读取Excel的基本方法-C#二次开发CAD(五)

了解了CAD中Table类的基本用法,今天咱们再来看看如何从Excel中读取数据,从而可以实现把数据丝滑地复制到CAD中。

我们这里使用NPOI库, NPOI 是一个开源的.NET库,允许.NET开发者在没有安装Microsoft Office的情况下读取和写入Microsoft Office文件格式。

一,安装NPOI库

解决方案资源管理器中,右击项目名称,在弹出的菜单中选择管理NuGet程序包

在弹出的界面中,选择浏览选项卡,输入NPOI,程序自动列出相应的库列表,选中、点击即可安装使用。

二、打开Excel

string filePath = @"c:\1.xlsx";
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(fs);//工作薄


ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表


//输入操作代码
}


三、获取数据

1,获取表格行数

int rowNums = sheet.LastRowNum + 1;//从0开始算

2,获取表格列数

NPOI库没有专门获取总列数的方法,需要遍历每一行,获取每一行最后一个单元格的数值,求取最大值,可得出最多列数,适用于不同列数的单元格,列数是从1开始算的。

int colNums = 1;
int j;
for (int i = 0; i < rowNums; i++)
{
  if( sheet.GetRow(i) != null)
   {j = sheet.GetRow(i).LastCellNum;
    if (j > colNums)
     { colNums = j; }
   }
}
Console.WriteLine(#34;总共有{colNums}行");

如果每行列数相同可以通过下面代码获取:

int colNums =sheet.GetRow(0).LastCellNum;

3,获取指定行的行高

IRow row = sheet.GetRow(1);
double height = row.HeightInPoints;//获取第2行的行高,单位是磅

4,获取指定列的列宽

double width = sheet.GetColumnWidth(i) / 256://单位是字符宽度,根据使用字体不同,会有差异

5,获取合并单元格区域集合

var mergedRegion = sheet.MergedRegions;//合并单元格的坐标集合

这个集合的元素有四个值,分别是item.FirstRow, item.FirstColumn, item.LastRow, item.LastColumn,可遍历将其转换为元组,添加至集合中使用。

var mergedRegion = sheet.MergedRegions;//合并单元格的坐标集合
foreach (var item in mergedRegion)
  {
   var middle = new Tuple<int, int, int, int>(item.FirstRow, item.FirstColumn, item.LastRow, item.LastColumn);
  }

6,获取对齐方式

IRow row = sheet.GetRow(1);//第2行
ICell cell = row.GetCell(1);//第2个单元格
ICellStyle cellStyle = cell.CellStyle;//单元格样式   
string horizontalAlignment = cellStyle.Alignment.ToString();//水平对齐方式,三种:Left,Center,Rigth
string verticalAlignment = cellStyle.VerticalAlignment.ToString();//垂直对齐方式,三种:Top,Center,Bottom

7,获取单元格内容

string content = cell.ToString()

将所有内容都转换为字符串,如果单元格是公式,将会赋值公式,不是公式的结果,如=A1*A2

如果要获取公式的计算结果,可以按下面方法获取,识别判断是数字公式、字符串公式或布尔公式。

  if (cell.CellType == CellType.Formula)
  {
      if (evaluator.Evaluate(cell).CellType is CellType.Numeric)
      {
          Console.WriteLine(#34;单元格内容是{evaluator.Evaluate(cell).NumberValue.ToString()}");
      }
      else if (evaluator.Evaluate(cell).CellType is CellType.String)
      {
          Console.WriteLine(#34;单元格内容是{evaluator.Evaluate(cell).StringValue.ToString()}");
      }
      else Console.WriteLine(#34;单元格内容是{evaluator.Evaluate(cell).BooleanValue.ToString()}");
  }

四,注意事项

1,连接Excel时,需要将Excel文件关闭,否则会出现读取错误。

2,读取单元格时,如果单元格未赋值,程序会报错,记得加上判断语句 if(row != null)等。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言