国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
使用POI操作Excel和Word
前言:今天在項目中看到有小模塊是上傳Excel解釋后保存到數(shù)據(jù)庫的操作,好奇之下去了解了如何使用Apache POI操縱Excel和Word,以下為小分享 


什么是POI? 
      POI是Apache下的一個項目,是用Java編寫的開源框架,提供API供開發(fā)者直接操作Microsoft Office(Excel,Word,PowerPoint...) 

POI為我們帶來了什么? 
      在很多的企業(yè)當中,儲蓄數(shù)據(jù)是使用Excel文檔的,因為Excel文檔的格式方便,也能套用公式,而企業(yè)程序是存儲在數(shù)據(jù)庫當中,這樣就需要一種兩者之間互相轉(zhuǎn)換的方法,當企業(yè)剛開始使用信息化的管理系統(tǒng)時,也需要將Excel的數(shù)據(jù)錄入到程序當中,這種需求是非常普遍的. 

POI使用: 

      首先增加Maven的依賴 

<!-- POI核心依賴 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<!-- 為POI支持Office Open XML -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.8</version>
</dependency>
<!-- 支持Word文檔的操作 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.8</version>
</dependency>


以下為操作Excel的測試類 

package com.accentrix.ray;


import Java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Before;
import org.junit.Test;


public class TestExcel {


private Workbook workbook;





/*
* 由于Excel當中的單元格Cell存在類型,若獲取類型錯誤 就會產(chǎn)生錯誤, 
* 所以通過此方法將Cell內(nèi)容全部轉(zhuǎn)換為String類型
*/
private String getCellValue(Cell cell) {
String str = null;
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BLANK:
str = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
str = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
str = String.valueOf(cell.getCellFormula());
break;
case Cell.CELL_TYPE_NUMERIC:
str = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
str = String.valueOf(cell.getStringCellValue());
break;
default:
str = null;
break;
}
return str;
}



@Before
public void setUp() throws InvalidFormatException, IOException {
// 加載excel文件,自動判斷是HSSF還是XSSF
workbook = WorkbookFactory.create(new File("E:/aaa.xls"));
}


/*
* 讀取一個已存在的Excel
*/
@Test
public void testReadExcel() throws InvalidFormatException, IOException {


// 獲取第一個工作目錄,下標從0開始
Sheet sheet = workbook.getSheetAt(0);


// 獲取該工作目錄最后一行的行數(shù)
int lastRowNum = sheet.getLastRowNum();


for (int i = 0; i < lastRowNum; i++) {


// 獲取下標為i的行
Row row = sheet.getRow(i);


// 獲取該行單元格個數(shù)
int lastCellNum = row.getLastCellNum();


for (int j = 0; j < lastCellNum; j++) {


// 獲取下標為j的單元格
Cell cell = row.getCell(j);


// 調(diào)用獲取方法
String cellValue = this.getCellValue(cell);
}
}
}


/*
* 使用Foreach方式讀取Excel
*/
@Test
public void testForeachReadExcel() {
// 根據(jù)sheet的名字獲取
Sheet sheet = workbook.getSheet("test");


// 處了上面testReadExcel的方式讀取以外,還支持foreach的方式讀取
for (Row row : sheet) {
for (Cell cell : row) {
String cellValue = this.getCellValue(cell);
System.out.println(cellValue);
}
}
}


/*
* 創(chuàng)建簡單的Excel
*/
@Test
public void testWriteExcel() throws IOException {
// 創(chuàng)建一個XSSF的Excel文件
workbook = new XSSFWorkbook();
FileOutputStream fos = new FileOutputStream("E:/test.xlsx");


// 創(chuàng)建名稱為test的工作目錄
Sheet sheet = workbook.createSheet("test");


/*
* 創(chuàng)建1個10行x10列的工作目錄
*/
for (int i = 0; i < 10; i++) {
// 創(chuàng)建一行
Row row = sheet.createRow(i);
for (int j = 0; j < 10; j++) {
// 創(chuàng)建一個單元格
Cell cell = row.createCell(j);
// 設置單元格value
cell.setCellValue("test");


// 此處為設置Excel的樣式,設置單元格內(nèi)容居中,
// 但這樣設置方式并不常用,請留意下面的方法
CellStyle cs = workbook.createCellStyle();
cs.setAlignment(CellStyle.ALIGN_CENTER);
cell.setCellStyle(cs);


}
}


// 將Excel寫出到文件流
workbook.write(fos);
}


/*
* 通過使用模板生成Excel文件,模板當中包含樣式, 
* 這樣我們只為模板填充數(shù)據(jù)就可以有相應的樣式
*/
@Test
public void testWriteExcelByTemplate() throws InvalidFormatException,
IOException {
String fileName = "test.xlsx";


// 通過類加載器獲取模板
workbook = WorkbookFactory.create(this.getClass().getClassLoader()
.getResourceAsStream(fileName));
FileOutputStream fos = new FileOutputStream("E:/test.xlsx");


Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
/*
* 此時可以通過getCellStyle()來獲取到該單元格對象的樣式,
* 獲取到樣式只要將此樣式放入新創(chuàng)建Excel單元格中,
* 就可以完成樣式的替換 獲取可以直接填充此模板再進行輸出,
* 注意插入新一行時,要使用sheet.shiftRows(0, 7, 1, true, true); 
* 這里代表從第0行到第7向下移動1行,保持寬度和高度
*/
CellStyle cellStyle = cell.getCellStyle();


workbook.write(fos);
}
}

以下為操作Word的測試類 

package com.accentrix.ray;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


import junit.framework.Assert;


import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.Borders;
import org.apache.poi.xwpf.usermodel.LineSpacingRule;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TextAlignment;
import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class TestWord {


// 生成Word2007版本
private FileInputStream fis2007;
private XWPFDocument doc2007;
private XWPFWordExtractor word2007;


// 生成Word2003版本
private FileInputStream fis2003;
private HWPFDocument doc2003;
private WordExtractor word2003;


// 創(chuàng)建Word輸出流
private FileOutputStream fos;


@Before
public void setUp() throws Exception {


// 初始化2007版本
fis2007 = new FileInputStream(new File("D:/test.docx"));
doc2007 = new XWPFDocument(fis2007);
word2007 = new XWPFWordExtractor(doc2007);


// 初始化2003版本
fis2003 = new FileInputStream(new File("D:/test2.doc"));
doc2003 = new HWPFDocument(fis2003);
word2003 = new WordExtractor(doc2003);


// 初始化輸出流
fos = new FileOutputStream(new File("D:/testCreateWord.docx"));
}


@Test
public void testReadWord2003() {
// 直接通過getText()獲取文本
String text = word2003.getText();
// 獲取總頁數(shù)
doc2003.getSummaryInformation().getPageCount();
// 獲取總字數(shù)
doc2003.getSummaryInformation().getWordCount();
Assert.assertNotNull(text);
}


@Test
public void testReadWord2007() {
// 直接通過getText()獲取文本
String text = word2007.getText();


// 獲取總頁數(shù)
doc2007.getProperties().getExtendedProperties()
.getUnderlyingProperties().getPages();


// 獲取去除空格的總頁數(shù)
doc2007.getProperties().getExtendedProperties()
.getUnderlyingProperties().getCharacters();


// 獲取帶空格的總頁數(shù)
doc2007.getProperties().getExtendedProperties()
.getUnderlyingProperties().getCharactersWithSpaces();


Assert.assertNotNull(text);
}


/*
* 演示如何創(chuàng)建Word文檔
*/
@Test
public void testWriteWord2007() throws IOException {
XWPFDocument doc = new XWPFDocument();


// 創(chuàng)建段落
XWPFParagraph p1 = doc.createParagraph();
// 設置樣式,此時樣式為一個正方形包圍文字
p1.setAlignment(ParagraphAlignment.CENTER);
p1.setBorderBottom(Borders.DOUBLE);
p1.setBorderTop(Borders.DOUBLE);
p1.setBorderRight(Borders.DOUBLE);
p1.setBorderLeft(Borders.DOUBLE);
p1.setBorderBetween(Borders.SINGLE);
p1.setVerticalAlignment(TextAlignment.TOP);


// 創(chuàng)建1段文字,通過段落創(chuàng)建
XWPFRun r1 = p1.createRun();
// 設置是否粗體
r1.setBold(true);
r1.setText("The quick brown fox");
r1.setBold(true);
r1.setFontFamily("Courier");
r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
r1.setTextPosition(100);


XWPFParagraph p2 = doc.createParagraph();
p2.setAlignment(ParagraphAlignment.RIGHT);


p2.setBorderBottom(Borders.DOUBLE);
p2.setBorderTop(Borders.DOUBLE);
p2.setBorderRight(Borders.DOUBLE);
p2.setBorderLeft(Borders.DOUBLE);
p2.setBorderBetween(Borders.SINGLE);


XWPFRun r2 = p2.createRun();
r2.setText("Hello Hello Hello Hello Hello Hello Hello");
r2.setStrike(true);
r2.setFontSize(20);


XWPFRun r3 = p2.createRun();
r3.setText("World World World World World World World");
r3.setStrike(true);
r3.setFontSize(20);


XWPFParagraph p3 = doc.createParagraph();
p3.setWordWrap(true);
// 設置該段落填充滿本頁,下面在顯示新文本將在下一頁顯示
p3.setPageBreak(true);


p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
p3.setAlignment(ParagraphAlignment.BOTH);
p3.setSpacingLineRule(LineSpacingRule.EXACT);


p3.setIndentationFirstLine(600);


doc.write(fos);
}


@After
public void tearDown() throws IOException {
if (fis2003 != null) {
fis2003.close();
}
if (fis2007 != null) {
fis2007.close();
}
if (fos != null) {
fos.close();
}
}
}

總結(jié): 
      使用POI讀取寫出Excel文件非常方便,但寫出的時候需要注意,是不包含樣式的,但若然要結(jié)合樣式來寫出Excel或Word就會變得非常復雜,當有業(yè)務需求的時候建議上Apache POI的官網(wǎng)查看相關(guān)的API和Demo 


本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java操作Excel的神奇之路
使用java技術(shù)將Excel表格內(nèi)容導入mysql數(shù)據(jù)庫
Java POI Excel( pio:純java操作excel的api )
POI和easyExcel
POI創(chuàng)建2007格式Excel的批注時內(nèi)容是空的
POI3.5讀取Excel2007
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服