zoukankan      html  css  js  c++  java
  • C# Excel导入与导出

    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     }
  • 相关阅读:
    web前端之jQuery
    java之awt编程
    java连接数据库的基本操作
    实习生应聘经历2018/3/1
    javaweb学习之建立简单网站
    mysql之视图
    71. Simplify Path
    347. Top K Frequent Elements
    7. Reverse Integer
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/lujingBK/p/11234521.html
Copyright © 2011-2022 走看看