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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM