Excel的结构
    1、Workbook工作簿(也就是文件)
    2、Sheet(也就是一个表)
    3、Row(也就是一个数据行)
    4、Cell(单元格)
    5、Value(单元格中具体的值)
        字符串
        数字
        日期
        布尔
        空
        特殊值:公式
Excel导入、导出
    Excel的结构
        1、Workbook工作簿(也就是文件)
        2、Sheet(也就是一个表)
        3、Row(也就是一个数据行)
        4、Cell(单元格)
        5、Value(单元格中具体的值)
            字符串
            数字
            日期
            布尔
            空
            特殊值:公式
    导入
        思路
            1、要把文件加载到程序中
            2、获取sheet
            3、获取所有行
            4、获取行中所有的数据
            5、将获取到的数据,按照原有的数据格式,存储到一个数据容器中
        实现(NPOI)
            1、选择Excel文件
            2、创建一个工作簿(IWrokbook) 接收Excel
                子主题 1
            3、获取ISheet
            4、获取行(IRow)
                行分为2种类型:标题行、数据行
                sheet.FirstRowNum第一行的行号
                sheet.LastRowNum最后一行的行号
            5、获取单元格(ICell)
            6、根据单元格的类型,获取单元格的值
    导出
导入
    思路
        1、要把文件加载到程序中
        2、获取sheet
        3、获取所有行
        4、获取行中所有的数据
        5、将获取到的数据,按照原有的数据格式,存储到一个数据容器中
    实现(NPOI)
        1、选择Excel文件
        2、创建一个工作簿(IWrokbook) 接收Excel
        3、获取ISheet
        4、获取行(IRow)
            行分为2种类型:标题行、数据行
            sheet.FirstRowNum第一行的行号
            sheet.LastRowNum最后一行的行号
        5、获取单元格(ICell)
        6、根据单元格的类型,获取单元格的值

  1 private void button1_Click(object sender, EventArgs e)
  2         {
  3             //1、要把文件加载到程序中
  4             //2、获取sheet
  5             //3、获取所有行
  6             //4、获取行中所有的数据
  7             //5、将获取到的数据,按照原有的数据格式,存储到一个数据容器中
  8
  9
 10             OpenFileDialog ofd = new OpenFileDialog();
 11             ofd.Filter = "Excel(*.xlsx)|*.xlsx";
 12             if (ofd.ShowDialog() != DialogResult.OK)
 13             {
 14                 return;
 15             }
 16             //创建一个数据表,用来存储 从Excel中导入的数据
 17             DataTable dt = new DataTable();
 18
 19             //得到Excel文件地址   是包含路径的fileName
 20             string excelFilePath = ofd.FileName;
 21             //创建一个工作簿   2007版本及以上  使用XSSFWorkbook   ,2007以前的版本 使用 使用HSSFWorkbook
 22             IWorkbook workbook = new XSSFWorkbook(excelFilePath);
 23             //创建一个sheet  ,用来存储Excel中的一个Sheet
 24             //ISheet sheet = workbook.GetSheet("Sheet1");//根据sheet的名字获取
 25             ISheet sheet = workbook.GetSheetAt(0);//根据sheet的索引,索引从0开始
 26             //创建一个Row   存储第一行有效数据,通常 有可能是标题行
 27             IRow row = sheet.GetRow(sheet.FirstRowNum);
 28             //处理标题行, 遍历标题行中所有的单元格(Cell),每个单元格的值 即为列名
 29             foreach (ICell item in row.Cells)
 30             {
 31                 //往DataTable中添加Excel中对应的列的值
 32                 object cellValue = this.GetCellValueByType(item);
 33                 string columnName = "";//DataTable的列明
 34                 if (cellValue == null || cellValue.ToString() =="")
 35                 {
 36                     columnName = "column" + dt.Columns.Count;//默认名
 37                 }
 38                 else
 39                 {
 40                     columnName = cellValue.ToString();//具体值单元格值  作为名字
 41                 }
 42                 dt.Columns.Add(columnName);
 43             }
 44             //遍历所有的有效数据 并将有效数据 添加到DataTable
 45             for (int i = sheet.FirstRowNum+1; i <= sheet.LastRowNum; i++)
 46             {
 47                 IRow dataRow = sheet.GetRow(i);
 48                 DataRow dr = dt.NewRow();// 创建与dt表具有相同架构的新数据行(Row)
 49                 for (int j = 0; j < dataRow.Cells.Count; j++)
 50                 {
 51                     dr[j] = this.GetCellValueByType( dataRow.Cells[j]);
 52                 }
 53                 dt.Rows.Add(dr);//向dt数据表中添加一个数据行
 54             }
 55             //将导入的数据表 绑定到dataGridView1
 56             dataGridView1.DataSource = dt;
 57         }
 58
 59         public object GetCellValueByType(ICell cell)
 60         {
 61
 62             switch (cell.CellType)
 63             {
 64                 case CellType.Blank:
 65                     return "";
 66                 case CellType.Boolean:
 67                     return cell.BooleanCellValue;
 68                 case CellType.Error:
 69                     return cell.ErrorCellValue;
 70                 case CellType.Formula:
 71                     return cell.CellFormula;
 72                 case CellType.Numeric:
 73                     return cell.NumericCellValue;
 74                 case CellType.String:
 75                     return cell.StringCellValue;
 76                 case CellType.Unknown:
 77                     return null;
 78                 default:
 79                     return "";
 80             }
 81         }
 82
 83         private void button2_Click(object sender, EventArgs e)
 84         {
 85             SaveFileDialog sfd = new SaveFileDialog();
 86             sfd.Filter = "Excel(*.xlsx)|*.xlsx";
 87             if (sfd.ShowDialog() != DialogResult.OK)
 88             {
 89                 return;
 90             }
 91             string excelFileSavePath = sfd.FileName;
 92             DataTable dt = new DataTable();
 93             dt.Columns.Add("姓名");
 94             dt.Columns.Add("性别");
 95             dt.Columns.Add("年龄");
 96             #region 给DataTable 添加模拟数据
 97             DataRow dr = dt.NewRow();
 98             dr["姓名"] = "张三1";
 99             dr["性别"] = "男";
100             dr["年龄"] = "21";
101             dt.Rows.Add(dr);
102             dr = dt.NewRow();
103             dr["姓名"] = "张三2";
104             dr["性别"] = "男";
105             dr["年龄"] = "22";
106             dt.Rows.Add(dr);
107             dr = dt.NewRow();
108             dr["姓名"] = "张三3";
109             dr["性别"] = "男";
110             dr["年龄"] = "23";
111             dt.Rows.Add(dr);
112             #endregion
113             IWorkbook wordbook = new XSSFWorkbook();
114              ISheet sheet = wordbook.CreateSheet("Sheet1");
115             IRow row = sheet.CreateRow(0);
116             row.CreateCell(0).SetCellValue("姓名");
117             row.CreateCell(1).SetCellValue("性别");
118             row.CreateCell(2).SetCellValue("年龄");
119             for (int i = 0; i < dt.Rows.Count; i++)
120             {
121                 row = sheet.CreateRow(i+1);
122                 row.CreateCell(0).SetCellValue(dt.Rows[i]["姓名"].ToString());
123                 row.CreateCell(1).SetCellValue(dt.Rows[i]["性别"].ToString());
124                 row.CreateCell(2).SetCellValue(Convert.ToInt32(dt.Rows[i]["年龄"]));
125             }
126             using (FileStream fs = new FileStream(excelFileSavePath, FileMode.Create, FileAccess.Write))
127             {
128                 wordbook.Write(fs);
129             }
130             MessageBox.Show("导出完成");
131         }
132     }
133     public class Student {
134         public int ID { get; set; }
135         public string Name { get; set; }
136     }

转载于:https://www.cnblogs.com/lujingBK/p/11234521.html

C# Excel导入与导出相关推荐

  1. C# Excel导入、导出

    C# Excel导入.导出 本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含 ...

  2. 大数据量的Excel导入和导出

    大数据量的Excel导入和导出 涉及到的技术 poi:使用SXSSFWorkbook,对数据进行分页且批量写入到磁盘(可以是任何outputsteam),减少数据在内存中的存储 easyExcel:从 ...

  3. 前端实现 Excel 导入和导出功能

    注意:Excel的导入.导出功能一般情况下都是服务端完成,这里只是记录一下前端实现方法,供小众场景使用. 这里的实现要依赖第三方库:xlsx. 兼容性:IE9+ 安装 xlsx npm i -S ht ...

  4. 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出

    场景 使用若依前后端分离版实现Excel的导入和导出. 前端:Vue+ElementUI 后端:SpringBoot+POI+Mysql 注: 博客: https://blog.csdn.net/ba ...

  5. 使用POI和EasyExcel实现Excel导入和导出功能

    需求场景 开发中经常会设计到excel的处理,需求场景如下所示: 1.将用户信息导出为excel表格(导出数据) 2.将Excel表中的信息录入到数据库中(导入数据) 操作Excel目前比较流行的就是 ...

  6. Java Excel导入和导出(支持xls导入,xlsx导入,图片导出,百万数据量导出)

    免费源码下载(提取码:qdhy) 工程结构目录 所需JAR包 <dependencies><!-- JUNIT 测试 --><dependency><grou ...

  7. ThinkPHP6 的Excel导入与导出

    Excel导入导出功能我们经常用到,下面记录自己的实现方法.Helper类PHPExcelHelper 可以直接拿过来使用.在控制器中实现数据组装,model中实现数据验证,最后导入或导出. help ...

  8. C#Excel导入和导出

    Excel导入 一.在WEB中导入Excel的方法 方法1: 通过OleDB方式获取Excel文件的数据到DataSet中,然后将Dataset中的每笔记录插入到SQL Server using Sy ...

  9. 可以实现一个前端的 Excel 导入和导出功能吗?

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流 前言 [**负责人 A]:现在报表部分基于接口的 Excel 的导入和导出功能有点慢,前端这边能不能实现一下这个功能,然后我们在比对看看效果 ...

最新文章

  1. linux tomcat端口无法,linux下tomcat无法远程访问(开放8080端口)
  2. python大全1015python大全_python 列表总结大全
  3. python如何编程-终于发现怎么自学python编程
  4. Cocos2d-x VS. OGEngine,联盟与部落的战争
  5. java返回泛型_Java泛型从泛型方法返回持有者对象
  6. CDH5部署三部曲之二:部署和设置,高薪程序员必会
  7. php顶级框架,10个顶级PHP开源项目「2019」
  8. OpenCV-双边滤波cv::bilateralFilter
  9. 最好用电脑录音软件推荐
  10. Swing-图表(扇形图的绘制)
  11. 网络安全——风险评估
  12. Android面试经历2018
  13. Bit Miracle Jpeg2000-SEO狼术
  14. Android 修改手机状态栏文字颜色
  15. paddle.paramattr转换为torch框架下算法
  16. Qt编写安防视频监控系统55-布局方案
  17. Android 开发多摄像头 API
  18. 学习编程前需要知道什么?
  19. QList添加自定义结构体
  20. 1024程序员节的由来?

热门文章

  1. java中的无效的列类型_java.sql.SQLException: 无效的列类型: 1111
  2. java打开exe程序
  3. switch注意事项与在什么情况下使用switch或if语句
  4. 分布式文件系统FastDFS安装教程
  5. ObjectMapper忽略字段大小写
  6. eclipse 创建springboot 提示socket time超时问题
  7. matlab 不允许函数定义,matlab中函数定义在脚本中不允许是什么意思
  8. 字符串%百分号 和 format 格式化
  9. shell脚本通过ping命令来获取平均延时
  10. 汉王拉开人脸识别产业化大幕 市场应用前景广阔