android 控制word,Android使用POI进行Word操作(一)
操作步驟
步驟一:引用相關POI庫
步驟二:創建POI中的word文件對象
步驟三:調用word文件對象的方法對文件進行操作
步驟一:引用相關的POI庫
吐槽一下,這一步是最坑的
本人嘗試了很多版本組合,最新的版本提示class重復引用。老的版本又有存在圖片插入后損壞文件。本人把能用的放在后面
加載方式
效果
通過gradle引用3.14poi
使用javatest能夠通過,但在編譯apk時提示重復類
加載最新的5.1poi包
提示無法找到一些java類
加載3.8的poi包及java包
添加圖片時,導致docx文件異常
通過gradle混合加載版本
能夠使用
錯誤引用1-生成app提示類重復
implementation 'org.apache.poi:poi-ooxml:3.14'
implementation 'org.apache.poi:poi-excelant:3.14'
implementation 'org.apache.poi:poi-examples:3.14'
implementation 'org.apache.xmlbeans:xmlbeans:2.6.0'
類重復導入錯誤
錯誤引用2-添加圖片時doc錯誤
目前采用直接加載jar包的方式,引用庫加載文件如下:
implementation files('libs/poi-3.8-20120326.jar')
implementation files('libs/poi-ooxml-3.8-20120326.jar')
implementation files('libs/poi-ooxml-schemas-3.8-20120326.jar')
implementation files('libs/xmlbeans-2.3.0.jar')
implementation files('libs/commons-logging-1.1.jar')
implementation files('libs/dom4j-1.6.1.jar')
implementation files('libs/stax-api-1.0.1.jar')
正確引用-混合版本加載
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
implementation group: 'org.apache.xmlbeans', name: 'xmlbeans', version: '3.1.0'
implementation 'javax.xml.stream:stax-api:1.0'
implementation 'com.fasterxml:aalto-xml:1.2.2'
步驟二:創建POI對應的Document對象
首先區別你要加載的word后綴,是.doc還是.docx,因為這兩個所創建的對象不一樣,如果不對號入座則會報錯
org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
文件后綴
創建對象
doc
HWPFDocument
docx
XWPFDocument
由于doc是2003年的word版本,此處暫時略過。主要使用docx進行作業
步驟三:文件操作
操作類結構說明
獲取主要信息
讀取字段信息
// 段落,一般只文字內容,圖片表格等其他字符,會作為空字符
List paragraphs = doc.getParagraphs();
// 表格,整文檔中的所有表格
List tables = doc.getTables();
// 圖片,獲取的都是byte[]
List allPictures = doc.getAllPictures();
// 頁眉,只能獲取不同內容的頁眉
List headerList = doc.getHeaderList();
// 頁腳,注意自動生成的編號不會被獲取到,只能獲取不同類型的頁腳
List footerList = doc.getFooterList();
編輯文檔內容(覆蓋和添加)
注意使用POI的修改操作比較繁瑣,建議直接準備一個空文件進行填充
編輯和修改都最好不要對源文件進行修改,而是在修改后通過一個輸出流程,將修改后的文件輸出
默認所有的操作,最后都有調用 doc.write(out);
(一) 文字修改
操作步驟
遍歷所有的XWPFParagraph,并查找其中是否有自己需要修改的內容
遍歷該XWPFParagraph中的XWPFRun,調用toString()方法查看是否為需要修改的內容
使用run.setText("修改內容", 0)方法修改
List paragraphs = doc.getParagraphs();
for (int i = 0; i < paragraphs.size(); i++) {
XWPFParagraph para = paragraphs.get(i);
String text = para.getText();
if (!TextUtils.isEmpty(text)) {
index = text.indexOf(GOAL);
if (index != -1) {
List runs = para.getRuns();
for (XWPFRun run : runs) {
if (run.toString().equals("GOAL")) {
run.setText("修改內容", 0);
}
}
}
}
}
注意:
一定要添加第二個參數0,否則會變成插入操作
需要查找的內容不要增加特殊符號,特殊符號會被識別為單獨的XWPFRun對象
(二) 表格修改
操作步驟
確定需要處理的表格是第幾個
根據確定需要編輯的數據在第幾行,第幾列后,通過XWPFTable->XWPFTableRow->CTRow->XWPFTableCell
在獲取到XWPFTableCell后調用
//表格
List tables = doc.getTables();
XWPFTable table = tables.get(0);
table.getRow(0).getCell(1).setText("LJJ");
table.getRow(1).getCell(1).setText("29");
table.getRow(2).getCell(1).setText("地球");
注意:
若擔心異常退出,可以做一些長度限制,通過table.getRows();,然后每一行的row.getCtRow()sizeOfTcArray();判斷列數
(三) 圖片插入
此處默認在最后插入圖片,插入圖片的方式是通過輸入流的方式插入
XWPFRun run = doc.createParagraph().createRun();
FileInputStream picIn = new FileInputStream(new File(picPath));
run.addPicture(picIn, XWPFDocument.PICTURE_TYPE_PNG, "插入圖片", Units.toEMU(256), Units.toEMU(256));
FileUtils.close(picIn);
注意:
插入圖片打開word出現錯誤,則需要升級poi版本。目前可以使用的我已經上傳在最上面的下載地址了
插入圖片的寬和高,一定要使用Units.toEMU方法,并傳入想要顯示的寬和高。直接傳入寬和高無法顯示
效果圖
測試過程
原始文檔
輸出文檔
總結
以上是生活随笔為你收集整理的android 控制word,Android使用POI进行Word操作(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为交换机s2700怎么重置_华为交换机
- 下一篇: python字典的建立和输出_字典的创建