读取 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(@"xlsA499ANN636412MO.xls");
            DataSet dataSet1 = ConvertToDataTable();

            dataGridView1.DataSource = dataSet1.Tables[0];
        }

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

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

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

原文地址:https://www.cnblogs.com/z5337/p/3730585.html