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 }