博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# vs2017 winForm 用NOPI(第三方库)导入Excel文件到datagridview
阅读量:4626 次
发布时间:2019-06-09

本文共 3678 字,大约阅读时间需要 12 分钟。

注:这种方法有一个问题:无法读取不规范的Excel文件(一般是由于第三方工具自动生成的excel文件,如网页、xml另存为的)

1.在项目引用的NuGet安装NOPI;(除了NOPI还有ExcelDataReader、Spire.XLS、EPPlus等其它第三方库也可以操作Excel文件)

 

2.在头部引用

using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.UserModel; using System.IO;

3.winForm界面(灰色的部分是datagridview1):

4.代码:

using System;using System.Windows.Forms;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.UserModel;using System.IO;namespace InputExcelTest{    public partial class Form_SelectFile : Form    {        public Form_SelectFile()        {            InitializeComponent();        }        private void BtnSelectFile_Click(object sender, EventArgs e)        {
//选择文件 openFileDialog1.Filter= "XLS文件|*.xls|XLSX文件|*.xlsx";//筛选文件类型 openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { InputWorkbook(openFileDialog1.FileName);//执行导入 } openFileDialog1.Dispose(); } private void BtnCancel_Click(object sender, EventArgs e) { Close(); } //导入工作簿 private void InputWorkbook(string filePath) {
if (filePath != "") { try { string fileType = filePath.Substring(filePath.LastIndexOf(".") + 1);//取得文件后缀 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);//创建文件流 bool isXls = true;//判断文件类型 if (fileType == "xlsx") { isXls = false; } IWorkbook workbook = CreateWorkbook(isXls, fs);//创建工作簿 ISheet sheet = workbook.GetSheetAt(0);//取得第一个工作表 int rowCount = sheet.LastRowNum + 1;//取得行数 int colCount = sheet.GetRow(0).LastCellNum;//取得列数 //初始化datagridview1 dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); for (int c = 0; c < colCount; c++)//遍历Excel第一行,生成dataGridView1列名 { ICell cell = sheet.GetRow(0).GetCell(c); dataGridView1.Columns.Add(c.ToString() + cell.ToString(), cell.ToString()); } for (int r = 1; r < rowCount; r++)//遍历Excel其他行,生成dataGridView1单元格内容 {
//遍历Excel行,从第二行开始 IRow row = sheet.GetRow(r); int index = dataGridView1.Rows.Add(); colCount = row.LastCellNum; for (int c = 0; c < colCount; c++) {
//遍历每个单元格,将单元格内容填入dataGridView1单元格中 ICell cell = row.GetCell(c); if (cell == null)//如果该单元格没有内容,跳过 { continue; } dataGridView1.Rows[index].Cells[c].Value = cell.ToString(); } } } catch (Exception ex) { MessageBox.Show("导入失败: " + ex.Message); } } else { MessageBox.Show("请选择Excel文件"); } } //创建工作簿 private static IWorkbook CreateWorkbook(bool isXLS, FileStream fs) { if (isXLS) { return new HSSFWorkbook(fs); } else { return new XSSFWorkbook(fs); } } }}

 

转载于:https://www.cnblogs.com/nb08611033/p/8906047.html

你可能感兴趣的文章
java基础小总结(2)
查看>>
HDU(1847)Good Luck in CET-4 Everybody!
查看>>
unity中的UI状态机,用于各界面之间的切换和跳转
查看>>
tar命令-压缩,解压缩文件
查看>>
bootstrap 冻结表格,冻结表头
查看>>
Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
查看>>
Centos修改系统语言
查看>>
仿人智能控制器的参数简化(已发表于《计算机测量与控制》2013年第4期)
查看>>
Android学习笔记之progressBar(进度条)
查看>>
android图像处理系列之三--图片色调饱和度、色相、亮度处理
查看>>
FFmpeg 与媒体文件关系
查看>>
checkedListBox的使用
查看>>
python练习册 每天一个小程序 第0004题
查看>>
Map与List数据操作
查看>>
【MFC】 多线程互斥CMutex
查看>>
机器学习算法基础知识
查看>>
数据库分库分表(sharding)系列
查看>>
C++构造函数(一)
查看>>
用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (一)
查看>>
RK3399 BOX编译步骤
查看>>