Android利用POI實(shí)現(xiàn)將圖片插入到Excel
問題
前兩天有個(gè)小工具的開發(fā),實(shí)現(xiàn)自動(dòng)化將Excel中的圖片鏈接Down下來(lái)然后插入到Excel表格中。朋友一直維護(hù)著任務(wù)類的(就那種打分評(píng)分啊,刷好評(píng)啊那些)。她量大,需要審核,靠人力實(shí)在是勞累。所以我研究了自動(dòng)化。
解決
實(shí)現(xiàn)插入圖片有兩種方式
方式一
直接插入到指定單元格,該方式適用于 Java 端,也就是在 PC上用,Android 因?yàn)槿鄙?resize的內(nèi)容會(huì)報(bào)錯(cuò)。博主沒找那么多資料看如何解決,我就直接用了方式二,支持Android的。
/**
* @param workbook workbook對(duì)象
* @param sheet 工作簿對(duì)象
* @param fileUrl URL
* @param row 第多少行
* @param col 第多少列
* @param scaleX X軸
* @param scaleY Y軸
*/
public static void picture2(Workbook workbook, Sheet sheet, String fileUrl, int row, int col, double scaleX, double scaleY) {
try {
//防止URL地址有中文,解碼
String head = fileUrl.substring(0, fileUrl.lastIndexOf("/")+1);
String suffix = fileUrl.substring(fileUrl.lastIndexOf("/")+1);
String link = head + URLEncoder.encode(suffix,"UTF-8");
URL url = new URL(link); // 構(gòu)造URL
URLConnection con = url.openConnection(); // 打開連接
con.setConnectTimeout(8 * 1000); //設(shè)置請(qǐng)求超時(shí)
InputStream is = con.getInputStream(); // 輸入流
byte[] bytes = IOUtils.toByteArray(is);
@SuppressWarnings("static-access")
int pictureIdx = workbook.addPicture(bytes, workbook.PICTURE_TYPE_PNG); //參數(shù)二是圖片格式 還有jpg格式等
CreationHelper helper = workbook.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(col); // 圖片插入坐標(biāo)
anchor.setRow1(row);
Picture pict = drawing.createPicture(anchor, pictureIdx); // 插入圖片
pict.resize(scaleX, scaleY); // 這個(gè)方法在 Android 端會(huì)造成崩潰。
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}方式二
雖然復(fù)雜點(diǎn),但是無(wú)論是多端還是定制性都更強(qiáng)一些。該方式是插入坐標(biāo),坐標(biāo)稍微復(fù)雜些。
public static void picture(Workbook workbook, Sheet sheet, String fileUrl, String fileType, int row, int col) {
try {
Drawing patriarch = sheet.createDrawingPatriarch();
URL url = new URL(fileUrl); // 構(gòu)造URL
URLConnection con = url.openConnection(); // 打開連接
con.setConnectTimeout(8 * 1000); //設(shè)置請(qǐng)求超時(shí)
InputStream is = con.getInputStream(); // 輸入流
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
BufferedImage bufferImg = ImageIO.read(is);
ImageIO.write(bufferImg, "JPEG", byteArrayOut);
bufferImg.flush();
byteArrayOut.flush();
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0,( short ) 0, 0, ( short ) 5, 8);
patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); //參數(shù)二是圖片格式 還有png格式等
} catch (Exception e) {
e.printStackTrace();
}
}
主要解釋一下定位圖片位置函數(shù) ClientAnchor 的八個(gè)參數(shù)int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2
前四個(gè)表示的是 excel 邊框的內(nèi)距離,我們通常情況下都是0。


重點(diǎn)要看后四個(gè)參數(shù)
short col1, int row1, short col2, int row2
前兩個(gè)表示圖片左上角所在的單元格左上角的位置,這個(gè)不難理解。
后兩個(gè)表示圖片右下角所在的單元格左上角的位置,這個(gè)要特別留意。


橫向的 A B C D列 是從0開始數(shù)的,圖中 C是 2 豎著的是 4 ,自然起始左上角就是 2 ,4 。 右下角是同理
到此這篇關(guān)于Android利用POI實(shí)現(xiàn)將圖片插入到Excel的文章就介紹到這了,更多相關(guān)Android圖片插入Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果
這篇文章主要介紹了Android實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果,這種效果大家經(jīng)常遇到,想知道如何實(shí)現(xiàn)的,請(qǐng)閱讀本文2016-08-08
Andriod Studio實(shí)現(xiàn)保存QQ密碼功能(案例代碼詳解)
這篇文章主要介紹了Andriod Studio實(shí)現(xiàn)保存QQ密碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
藍(lán)牙原理Android代碼實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了藍(lán)牙原理Android代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Android編程之短信竊聽器實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之短信竊聽器實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了Android編程實(shí)現(xiàn)竊聽器的具體步驟與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android開發(fā)筆記之:AsyncTask的應(yīng)用詳解
本篇文章是對(duì)Android中AsyncTask的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Android編程使用Fragment界面向下跳轉(zhuǎn)并一級(jí)級(jí)返回的實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程使用Fragment界面向下跳轉(zhuǎn)并一級(jí)級(jí)返回的實(shí)現(xiàn)方法,較為詳細(xì)的分析了Fragment界面跳轉(zhuǎn)所涉及的相關(guān)知識(shí)點(diǎn)與實(shí)現(xiàn)技巧,并附帶了完整的實(shí)例代碼供讀者下載參考,需要的朋友可以參考下2015-10-10
Android字符串轉(zhuǎn)Ascii碼實(shí)例代碼
這篇文章主要介紹了Android字符串轉(zhuǎn)Ascii碼的方法,大家參考使用2013-11-11
Android 適配器模式應(yīng)用及設(shè)計(jì)原理
這篇文章主要介紹了Android 適配器模式應(yīng)用及設(shè)計(jì)原理的相關(guān)資料,Android開發(fā)者應(yīng)該都知道適配器會(huì)用,但是不是多清楚原理,這里幫大家分析下原理,需要的朋友可以參考下2016-10-10
Kotlin字符串操作在Android開發(fā)中的應(yīng)用示例代碼
本文介紹了Kotlin在Android開發(fā)中的字符串操作,包括多行字符串的創(chuàng)建、字符串插值、獲取字符串長(zhǎng)度以及處理特殊字符等,通過示例代碼,展示了這些操作的實(shí)現(xiàn)方法,使開發(fā)者在處理字符串時(shí)更加高效便捷,感興趣的朋友一起看看吧2025-03-03

