首页 > 其他 > 详细

使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中

时间:2014-02-13 20:02:21      阅读:569      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using NPOI.SS.UserModel;        //NPOI
using NPOI.HSSF.Util;           //NPOI
using NPOI.HSSF.UserModel;      //NPOI
using NPOI.XSSF.UserModel;      //NPOI
using System.Data.SqlClient;
using System.Data;

 请先下载NPOI的所有dll,然后Add reference.

1.导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/// <summary>
/// Excel某sheet中内容导入到DataTable中
/// 区分xsl和xslx分别处理
/// </summary>
/// <param name="filePath">Excel文件路径,含文件全名</param>
/// <param name="sheetName">此Excel中sheet名</param>
/// <returns></returns>
public DataTable ExcelSheetImportToDataTable(string filePath, string sheetName)
{
             
    DataTable dt = new DataTable();
 
    if (Path.GetExtension(filePath).ToLower() == ".xls".ToLower())
    {//.xls
        #region .xls文件处理:HSSFWorkbook
        try
        {
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
 
                hssfworkbook = new HSSFWorkbook(file);
            }
        }
        catch (Exception e)
        {
            throw e;
        }           
 
        ISheet sheet = hssfworkbook.GetSheet(sheetName);
        System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
        HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);               
 
        //一行最后一个方格的编号 即总的列数 
        for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
        {
            //SET EVERY COLUMN NAME
            HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
 
            dt.Columns.Add(cell.ToString());
        }
 
        while (rows.MoveNext())
        {
            IRow row = (HSSFRow)rows.Current;
            DataRow dr = dt.NewRow();
 
            if (row.RowNum == 0) continue;//The firt row is title,no need import
 
            for (int i = 0; i < row.LastCellNum; i++)
            {
                if (i>=dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
                {
                    break;
                }
 
                ICell cell = row.GetCell(i);
 
                if ((i==0)&&(string.IsNullOrEmpty(cell.ToString())==true))//每行第一个cell为空,break
                {
                    break;
                }
 
                if (cell == null)
                {
                    dr[i] = null;
                }
                else
                {
                    dr[i] = cell.ToString();
                }
            }
                     
            dt.Rows.Add(dr);
        }
        #endregion
    }
    else
    {//.xlsx
        #region .xlsx文件处理:XSSFWorkbook
        try
        {
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
 
                hssfworkbook = new XSSFWorkbook(file);
            }
        }
        catch (Exception e)
        {
            throw e;
        }           
 
        ISheet sheet = hssfworkbook.GetSheet(sheetName);
        System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
        XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
 
                 
 
        //一行最后一个方格的编号 即总的列数 
        for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
        {
            //SET EVERY COLUMN NAME
            XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
 
            dt.Columns.Add(cell.ToString());
 
        }
 
        while (rows.MoveNext())
        {
            IRow row = (XSSFRow)rows.Current;
            DataRow dr = dt.NewRow();
 
            if (row.RowNum == 0) continue;//The firt row is title,no need import
 
            for (int i = 0; i < row.LastCellNum; i++)
            {
                if (i >= dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
                {
                    break;
                }
 
                ICell cell = row.GetCell(i);
 
                if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
                {
                    break;
                }
 
                if (cell == null)
                {
                    dr[i] = null;
                }
                else
                {
                    dr[i] = cell.ToString();
                }
            }
            dt.Rows.Add(dr);
        }
        #endregion
    }
    return dt;
}

 2.导出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/// <summary>
       /// NPOI导出Excel,不依赖本地是否装有Excel,导出速度快
       /// </summary>
       /// <param name="dataGridView1">要导出的dataGridView控件</param>
       /// <param name="sheetName">sheet表名</param>
       ///
       public static void ExportToExcel(DataGridView dataGridView1, string sheetName)
       {
           SaveFileDialog fileDialog = new SaveFileDialog();
           fileDialog.Filter = "Excel(97-2003)|*.xls";
           if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
           {
               return;
           }
           //不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
           dataGridView1.AllowUserToAddRows = false;
           HSSFWorkbook workbook = new HSSFWorkbook();
           ISheet sheet = workbook.CreateSheet(sheetName);
           IRow rowHead = sheet.CreateRow(0);
 
           //填写表头
           for (int i = 0; i < dataGridView1.Columns.Count; i++)
           {
               rowHead.CreateCell(i, CellType.String).SetCellValue(dataGridView1.Columns[i].HeaderText.ToString());
           }
           //填写内容
           for (int i = 0; i < dataGridView1.Rows.Count; i++)
           {
               IRow row = sheet.CreateRow(i + 1);
               for (int j = 0; j < dataGridView1.Columns.Count; j++)
               {
                   row.CreateCell(j, CellType.String).SetCellValue(dataGridView1.Rows[i].Cells[j].Value.ToString());
               }
           }
 
           using (FileStream stream = File.OpenWrite(fileDialog.FileName))
           {
               workbook.Write(stream);
               stream.Close();
           }
           MessageBox.Show("导出数据成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
           GC.Collect();
       }

使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中

原文:http://www.cnblogs.com/songrun/p/3547738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!