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     }

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值