zoukankan      html  css  js  c++  java
  • NPOI读取Excel官方demo

    关键代码: 
    读:
       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);
                }
            }
    
            void ConvertToDataTable()
            {
                ISheet sheet = hssfworkbook.GetSheetAt(0);
                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
    
                DataTable dt = new DataTable();
                for (int j = 0; j < 5; j++)
                {
                    dt.Columns.Add(Convert.ToChar(((int)'A')+j).ToString());
                }
    
                while (rows.MoveNext())
                {
                    IRow row = (HSSFRow)rows.Current;
                    DataRow dr = dt.NewRow();
    
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        ICell cell = row.GetCell(i);
    
    
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }
                dataSet1.Tables.Add(dt);
            }
    
            private void btnImport_Click(object sender, EventArgs e)
            {
                InitializeWorkbook(@"xlsBook1.xls");
                ConvertToDataTable();
    
                dataGridView1.DataSource = dataSet1.Tables[0];
            }

    写:

    //按行列导出数据:
    HSSFWorkbook hssfworkbook = new HSSFWorkbook();  //命名空间:using NPOI.HSSF.UserModel;
    Sheet sheet1 = hssfworkbook.CreateSheet("Sheet1");  //命名空间:using NPOI.SS.UserModel;
    sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");  //在第一行,第一列添加一个值
    sheet1.CreateRow(1).CreateCell(0).SetCellValue("This is a test");
    Row row = sheet1.CreateRow(2);  //创建第三行。
    row.CreateCell(1).SetCellValue("test");  //在第三行第一列加入值  这两行效果和上面那两行是一样的。创建多行用Row代码清晰
    sheet1.AutoSizeColumn(0);  //会按照值的长短 自动调节列的大小
    sheet1.AutoSizeColumn(1);
    using (FileStream file = new FileStream(@"test.xls", FileMode.Create))
    {
    hssfworkbook.Write(file);  //创建test.xls文件。
    file.Close();
    }

    补充:
    1.

    dt.Columns.Add(Convert.ToChar(((int)'A')+j).ToString());
    DataTable如果不创建DataColumn会报错:无法找到列 0。  NPOI.HSSF.UserModel.HSSFCell.ToString

    2.
    NPOI的行和列的index都是从0开始
    3、

    POI读取Excel有两种格式一个是HSSF,另一个是XSSF。本文主要是利用HSSF读取Excel
    先说下HSSF和XSSF的区别
    官方给出的解释如下:
    HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format.
    XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
    即:HSSF适用2007及以前的版本,XSSF适用2007版本以上的

    HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
    HSSF and XSSF provides ways to read spreadsheets create, modify, read and write XLS spreadsheets. They provide:

    low level structures for those with special needs
    an eventmodel api for efficient read-only access
    a full usermodel api for creating, reading and modifying XLS files

    表头格式:

        protected CellStyle defaultHeaderStyle(Workbook wb) {
            Font headFont = wb.createFont();
            headFont.setBold(true);
            headFont.setFontName("宋体");
            headFont.setFontHeightInPoints((short) 11);
            CellStyle cellStyle = wb.createCellStyle();
            cellStyle.setFont(headFont);
            cellStyle.setBorderTop(BorderStyle.THIN);
            cellStyle.setBorderRight(BorderStyle.THIN);
            cellStyle.setBorderBottom(BorderStyle.THIN);
            cellStyle.setBorderLeft(BorderStyle.THIN);
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            return cellStyle;
        }
        protected void setRow(Workbook workbook) {
            Sheet sheet= sheet = workbook.createSheet();
    
            sheet.setDefaultColumnWidth(30);
            sheet.setColumnWidth(0, 10 * 256);
            sheet.setColumnWidth(1, 20 * 256);
    
            Row header = sheet.createRow(0);
            CellStyle style = defaultHeaderStyle(workbook);
            setHeadColumn(header, 0, "活动ID", style);
            setHeadColumn(header, 1, "奖品名称", style);
    
            // 定义Cell格式
            CreationHelper creationHelper = workbook.getCreationHelper();
            CellStyle cellStyle = workbook.createCellStyle();
            cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd  hh:mm:ss"));
          
            Row userRow = sheet.createRow(1);
            userRow.createCell(0).setCellValue(1);
               
            Cell dateCell = userRow.createCell(1);
            dateCell.setCellValue(new Date());
            dateCell.setCellStyle(cellStyle);
        }
    
        private void setHeadColumn(Row header, int column, String cellValue, CellStyle style) {
            Cell cell0 = header.createCell(column);
            cell0.setCellStyle(style);
            cell0.setCellValue(cellValue);
        }
  • 相关阅读:
    hive中使用正則表達式不当导致执行奇慢无比
    C/C++实现正负数四舍五入
    EEPlat的控制器概念
    由于好高骛远所以半途而废(张作作)
    新辰:关于“网络推广不能仅仅依靠网络”的详解
    SQL的事务回滚操作带案例分析
    怎样把引用的jar包和本项目一起导出成jar文件
    A星算法(Java实现)
    Hadoop之——HBASE结合MapReduce批量导入数据
    Spring MVC 数据验证——validate编码方式
  • 原文地址:https://www.cnblogs.com/softidea/p/3182456.html
Copyright © 2011-2022 走看看