随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

读取 Excel 之 NPOI

复制代码
        HSSFWorkbook hssfworkbook;

        void InitializeWorkbook(string path)
        {
            //read the template via FileStream, it is suggested to use FileAccess.Read to prevent file lock.
            //book1.xls is an Excel-2007-generated file, so some new unknown BIFF records are added. 
            using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook = new HSSFWorkbook(file);
            }
        }

        DataSet ConvertToDataTable()
        {
            // ISheet sheet = hssfworkbook.GetSheetAt(0);
            DataSet dataSet1 = new DataSet();
            foreach (ISheet sheet in hssfworkbook)
            {
                DataTable dt = new DataTable();

                int columnCount = 0;
                foreach (HSSFRow row in sheet)
                {
                    columnCount = Math.Max(columnCount, row.LastCellNum);
                }

                for (int j = 0; j < columnCount; j++)
                {
                    dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
                }

                foreach (HSSFRow row in sheet)
                {
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < columnCount; i++)
                    {
                        ICell cell = row.GetCell(i);
                        dr[i] = cell == null ? "" : cell.ToString();
                    }
                    dt.Rows.Add(dr);
                }

                dataSet1.Tables.Add(dt);
            }
            return dataSet1;
        }

        private void btnImport_Click(object sender, EventArgs e)
        {
            InitializeWorkbook(@"xls\A499ANN636412MO.xls");
            DataSet dataSet1 = ConvertToDataTable();

            dataGridView1.DataSource = dataSet1.Tables[0];
        }
复制代码

读取一个Excel 的多个 Sheet  并放到一个 DataSet 里。

当写 byte[] 时,要使用 ms.ToArray(); 而不要使用 ms.GetBuffer();

前者虽然稍慢,但不会在 Excel 文件中形成很多空字节。

posted on   z5337  阅读(273)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示