POI导入Excel数据常用API

原文链接

POI简介

  • Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF概况

  • HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

POI EXCEL文档结构类

  • HSSFWorkbook excel文档对象
  • HSSFSheet excel的sheet HSSFRow excel的行
  • HSSFCell excel的单元格 HSSFFont excel字体
  • HSSFName 名称 HSSFDataFormat 日期格式
  • HSSFHeader sheet头
  • HSSFFooter sheet尾
  • HSSFCellStyle cell样式
  • HSSFDateUtil 日期
  • HSSFPrintSetup 打印
  • HSSFErrorConstants 错误信息表

EXCEL常用操作方法

  • 建立Excel常用对象
POIFSFileSystem fs = newPOIFSFileSystem(new FileInputStream("d:/test.xls"));
    
//得到Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook(fs);
    
//得到Excel工作表对象
HSSFSheet sheet = wb.getSheetAt(0);
    
//得到Excel工作表的行
HSSFRow row = sheet.getRow(i);

//得到Excel工作表指定行的单元格
HSSFCell cell = row.getCell((short) j);

//得到单元格样式
cellStyle = cell.getCellStyle();
  • 建立Excel常用对象
//创建Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook();

//创建Excel工作表对象
HSSFSheet sheet = wb.createSheet("new sheet");

//创建Excel工作表的行
HSSFRow row = sheet.createRow((short)0);

//创建单元格样式
cellStyle = wb.createCellStyle();

//创建Excel工作表指定行的单元格
row.createCell((short)0).setCellStyle(cellStyle);

//设置Excel工作表的值
row.createCell((short)0).setCellValue(1);
  • 设置sheet名称和单元格内容
wb.setSheetName(1, "第一张工作表",HSSFCell.ENCODING_UTF_16);
            
cell.setEncoding((short) 1);   
   
cell.setCellValue("单元格内容");  
  • 取得sheet的数目
wb.getNumberOfSheets();
  • 根据index取得sheet对象
HSSFSheet sheet = wb.getSheetAt(0);
  • 取得有效的行数
int rowcount = sheet.getLastRowNum();   
  • 取得一行的有效单元格个数
row.getLastCellNum();
  • 单元格值类型读写
//设置单元格为STRING类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    
//读取为数值类型的单元格内容
cell.getNumericCellValue();
  • 设置列宽、行高
sheet.setColumnWidth((short)column,(short)width);

row.setHeight((short)height);
  • 添加区域,合并单元格
//合并从第rowFrom行columnFrom列
Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo  
(short)columnTo);

//到rowTo行columnTo的区域
sheet.addMergedRegion(region);

//得到所有区域       
sheet.getNumMergedRegions()
  • 保存Excel文件
FileOutputStream fileOut = new FileOutputStream(path); 
wb.write(fileOut); 
  • 根据单元格不同属性返回字符串数值
    public String getCellStringValue(HSSFCell cell) {
        String cellValue = "";
        switch (cell.getCellType()) {
            case HSSFCell.CELL_TYPE_STRING://字符串类型 
                cellValue = cell.getStringCellValue();
                if (cellValue.trim().equals("") || cellValue.trim().length() <= 0)
                    cellValue = "";
                break;
            case HSSFCell.CELL_TYPE_NUMERIC://数值类型 
                cellValue = String.valueOf(cell.getNumericCellValue());
                break;
            case HSSFCell.CELL_TYPE_FORMULA://公式 
                cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                cellValue = String.valueOf(cell.getNumericCellValue());
                break;
            case HSSFCell.CELL_TYPE_BLANK:
                cellValue = "";
                break;
            case HSSFCell.CELL_TYPE_BOOLEAN:
                break;
            case HSSFCell.CELL_TYPE_ERROR:
                break;
            default:
                break;
        }
        return cellValue;
    }
  • 保存Excel文件
HSSFCellStyle style = wb.createCellStyle();
//下边框
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);
//左边框  
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);
//右边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
//上边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  • 设置字体和内容位置
HSSFFont f  = wb.createFont();
//字号
f.setFontHeightInPoints((short) 11);
//加粗
f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
style.setFont(f);
//左右居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//上下居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//单元格内容的旋转的角度
style.setRotation(short rotation);

HSSFDataFormat df = wb.createDataFormat();
//设置单元格数据格式
style1.setDataFormat(df.getFormat("0.00%"));
//给单元格设公式    
cell.setCellFormula(string);
//单元格内容的旋转的角度     
style.setRotation(short rotation);  
  • 插入图片
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray       
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();      
BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));      
ImageIO.write(bufferImg,"jpg",byteArrayOut);      
//读进一个excel模版       
FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");       
fs = new POIFSFileSystem(fos);      
//创建一个工作薄       
HSSFWorkbook wb = new HSSFWorkbook(fs);      
HSSFSheet sheet = wb.getSheetAt(0);      
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();      
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);           
patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
  • 调整工作表位置
HSSFWorkbook wb = new HSSFWorkbook();     
HSSFSheet sheet = wb.createSheet("format sheet");     
HSSFPrintSetup ps = sheet.getPrintSetup();     
sheet.setAutobreaks(true);     
ps.setFitHeight((short)1);     
ps.setFitWidth((short)1);   
  • 设置打印区域
HSSFSheet sheet = wb.createSheet("Sheet1");     
wb.setPrintArea(0, "$A$1:$C$2");   
  • 标注脚注
HSSFSheet sheet = wb.createSheet("format sheet");     
HSSFFooter footer = sheet.getFooter()     
footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );  
  • 在工作单中清空行数据,调整行位置
HSSFWorkbook wb = new HSSFWorkbook();     
HSSFSheet sheet = wb.createSheet("row sheet");     
// Create various cells and rows for spreadsheet.      
// Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)      
sheet.shiftRows(5, 10, -5); 
  • 选中指定的工作表
HSSFSheet sheet = wb.createSheet("row sheet");     
heet.setSelected(true); 
  • 工作表的放大缩小
HSSFSheet sheet1 = wb.createSheet("new sheet");     
sheet1.setZoom(1,2);   // 50 percent magnification   
  • 头注和脚注
HSSFSheet sheet = wb.createSheet("new sheet");     
HSSFHeader header = sheet.getHeader();     
header.setCenter("Center Header");     
header.setLeft("Left Header");     
header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +     
HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");    
  • 自定义颜色
HSSFCellStyle style = wb.createCellStyle();     
style.setFillForegroundColor(HSSFColor.LIME.index);     
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     
HSSFFont font = wb.createFont();     
font.setColor(HSSFColor.RED.index);     
style.setFont(font);     
cell.setCellStyle(style);    

小结

  • 设置不显示excel网格线
sheet.setDisplayGridlines(false);
其中sheet是Sheet对象 
  • 设置excel单元格中的内容换行
cellStyle.setWrapText(true);

其中cellStyle是WorkBook创建的CellStyle对象,然后将cellStyle设置到要换行的Cell对象,最后在要换行的对象(一般为字符串)加入"/r/n"。如 
topTile.append("/r/n" +"cellContent");
  • 单元格的合并
sheet.addMergedRegion(new CellRangeAddress(0, 4, 0, 2));

本示例为合并4行2列
  • 设置页眉和页脚的页数
HSSFHeader header = sheet.getHeader(); 

header.setCenter("Center Header");

header.setLeft("Left Header");

header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") + HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");

HSSFFooter footer = (HSSFFooter )sheet.getFooter() 
footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
  • 使得一个Sheet适合一页
sheet.setAutobreaks(true); 
  • 设置放大属性
sheet.setZoom(3,4);
Zoom被明确为一个分数,例如下面的75%使用3作为分子,4作为分母
  • 设置打印
HSSFPrintSetup print = (HSSFPrintSetup) sheet.getPrintSetup();

print.setLandscape(true);//设置横向打印

print.setScale((short) 70);//设置打印缩放70%

print.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置为A4纸张 

print.setLeftToRight(true);//設置打印顺序先行后列,默认为先列行
            
print.setFitHeight((short) 10);设置缩放调整为10页高 

print.setFitWidth((short) 10);设置缩放调整为宽高 

sheet.setAutobreaks(false); 

if (i != 0 && i % 30 == 0) {
     sheet.setRowBreak(i);//设置每30行分页打印
}
  • 反复的行和列
HSSFWorkbook wb = new HSSFWorkbook(); 
wb.setRepeatingRowsAndColumns(0, 0, 12, 1, 6);
//设置1到12列,行1到6每一页重复打印 
  • 调整单元格宽度
sheet.setAutobreaks(true);
sheet.setColumnWidth((short)i,colsWidth[i]);
//设定单元格长度

sheet.autoSizeColumn((short) i);
//自动根据长度调整单元格长度 

欢迎光临我的个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 使用首先需要了解他的工作原理 1.POI结构与常用类 (1)创建Workbook和Sheet (2)创建单元格 (...
    长城ol阅读 8,396评论 2 25
  • 转自链接 目录 1.认识NPOI 2.使用NPOI生成xls文件 2.1创建基本内容 2.1.1创建Workboo...
    腿毛裤阅读 10,412评论 1 3
  • POI操作Excel Excel简介一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作...
    灰气球阅读 4,693评论 2 48
  • 转自链接 2.3.5 IF函数 2.3.6 CountIf和SumIf函数 2.3.7 Lookup函数 2.3....
    腿毛裤阅读 12,795评论 0 0
  • 创建新工程 打开Eclipse新建一个工程 点下一步 输入名称 点完成 新建一个目录用来存在第三方库文件 选择目录...
    长新阅读 2,182评论 3 1