java按照xls模板,java寫xlsx

本文目錄一覽:

JAVA實現EXCEL表格文件(.xls格式)的讀取、修改、保存、另存為、排序等操作。大佬們幫幫忙

import Java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

public class ReadExcel {

public static void readExcel(File file){

try {

InputStream inputStream = new FileInputStream(file);

String fileName = file.getName();

Workbook wb = null;

// poi-3.9.jar 只可以讀取2007以下的版本,後綴為:xsl

wb = new HSSFWorkbook(inputStream);//解析xls格式

Sheet sheet = wb.getSheetAt(0);//第一個工作表 ,第二個則為1,以此類推…

int firstRowIndex = sheet.getFirstRowNum();

int lastRowIndex = sheet.getLastRowNum();

for(int rIndex = firstRowIndex; rIndex = lastRowIndex; rIndex ++){

Row row = sheet.getRow(rIndex);

if(row != null){

int firstCellIndex = row.getFirstCellNum();

// int lastCellIndex = row.getLastCellNum();

//此處參數cIndex決定可以取到excel的列數。

for(int cIndex = firstCellIndex; cIndex 3; cIndex ++){

Cell cell = row.getCell(cIndex);

String value = “”;

if(cell != null){

value = cell.toString();

System.out.print(value+”\t”);

}

}

System.out.println();

}

}

} catch (FileNotFoundException e) {

// TODO 自動生成 catch 塊

e.printStackTrace();

} catch (IOException e) {

// TODO 自動生成 catch 塊

e.printStackTrace();

}

}

public static void main(String[] args) {

File file = new File(“D:/test.xls”);

readExcel(file);

}

}

java 往excel模板里寫數,行不固定且最下面有合計,那位好點實例

嗨 你好

你可以參考一下:

import jxl.Workbook;

import jxl.write.Label;

import jxl.write.WritableImage;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.WriteException;

import jxl.write.biff.RowsExceededException;

/**

* 導出excel

* @param reportParams  導出excel列名標示

* @param list導出excel值

* @param headersexcel頭

* @param reportName·excel的sheet名

* @param response

* @param startRow從哪一行開始放list值

* @param startCol  從哪一列開始放list值

* @return

*/

public boolean report(ReportBean rb, List list, XlsHeaderBean[] headers, String reportName, HttpServletResponse response, int startRow, int startCol, HttpServletRequest request){

WritableWorkbook wwb = null;

OutputStream os;

boolean flag = true;

Date date = new Date();

DateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);

String strDate = format.format(date);

try {

// 用Workbook類的工廠方法創建工作薄(Workbook)對象

response.setContentType(“application/x-msdownload”);

String sheetName = “report”;

sheetName = sheetName.replaceAll(“:”, “”).replaceAll(“[)]”, “”)

.replaceAll(“[(]”, “”);

// 這裡解釋一下

// attachment; 這個代表要下載的,如果去掉就編程直接打開了

// filename是文件名,另存為或者下載時,為默認的文件名

response.addHeader(“Content-Disposition”, “attachment; filename=”

+ new String(sheetName.getBytes(“UTF-8”), “ISO-8859-1”)+ strDate

+ “.xls”);

os = response.getOutputStream();

wwb = Workbook.createWorkbook(os);

} catch (IOException e) {

e.printStackTrace();

return flag = false;

}

if (wwb != null) {

// 創建一個可寫入的工作表

// Workbook的createSheet方法兩個參數,1名稱,2位置

WritableSheet ws = wwb.createSheet(reportName, 0);

// 下面開始添加單元格

// 導出excel

try {

Label labelC = null;

for(int j = 0; j headers.length; j++){

if(headers[j].isUnion()){

ws.mergeCells(headers[j].getCol(), headers[j].getRow(), headers[j].getCol()+headers[j].getColLength(), headers[j].getRow()+headers[j].getRowLength());

}

labelC = new Label(headers[j].getCol(), headers[j].getRow(), headers[j].getValue());

ws.addCell(labelC);

}

} catch (RowsExceededException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

String value = null;

for (int i = 0; i list.size(); i++) {

Map values = (Map)list.get(i);

for (int j = 0; j rb.getReportParams().length; j++) {

// 這裡需要注意的是,在Excel中,第一個參數表示列,第二個表示行

Label labelC;

if(values.get(rb.getReportParams()[j]) == null){

value = “”;

} else {

if(values.get(rb.getReportParams()[j]) instanceof java.util.Date){

value = format.format(values.get(rb.getReportParams()[j]));

} else if(values.get(rb.getReportParams()[j]) instanceof java.math.BigDecimal){

value = values.get(rb.getReportParams()[j]).toString();

} else {

value = values.get(rb.getReportParams()[j]).toString();

}

}

labelC = new Label(j+startCol, i + startRow, value);

try {

// 將生成的單元格添加到工作表中

ws.addCell(labelC);

} catch (RowsExceededException e) {

e.printStackTrace();

return flag = false;

} catch (WriteException e) {

e.printStackTrace();

return flag = false;

}

}

}

if(rb.isHasImg()){

String rootPath = this.getServletContext().getRealPath(“savefiles”);

String imgPath = rb.getImgPath();

if(rootPath != null rootPath.compareTo(“”) != 0 imgPath != null imgPath.compareTo(“”) !=0){

String[] strs = imgPath.split(“\\/”);

String imgName = strs[strs.length-1];

File file = new File(rootPath + File.separator + imgName);

if(file.exists()){

WritableImage wi = new WritableImage(0, startRow + list.size() + 2,12,20, file);

ws.addImage(wi);

}

}

}

try {

// 從內存中寫入文件中

wwb.write();

wwb.close();

return flag;

} catch (IOException e) {

e.printStackTrace();

return flag = false;

} catch (WriteException e) {

e.printStackTrace();

return flag = false;

}

}

return flag;

}

java操作excel,將多個excel模板寫入到一個excel的多個sheet中?

用poi

Workbook myWorkbook= new HSSFWorkbook(new FileInputStream(“路徑”));

Workbook workbookModel = new HSSFWorkbook(new FileInputStream(“路徑”));

for(int i= 0; iworkbookModel.getNumberOfSheets(); i++) {

HSSFSheet(myWorkbook, workbookModel.getSheet(i));

}

java如何將數據導入Excel模板

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import jxl.Sheet;

import jxl.Workbook;

import jxl.read.biff.BiffException;

public static ArrayListString readTelExcel(String filepath) {

try {

//查詢文件是否存在

File file = new File(filepath);

if (file.exists()) {

ArrayListString result = new ArrayListString();

//聲明一個excel文件對象

Workbook wb = Workbook.getWorkbook(file);

//讀取每一個工作薄,你也可能用wb.getSheets()得到全部工作薄

Sheet ws = wb.getSheet(0);

if (null != ws) {

//取出所有行

int rows = ws.getRows();

for (int i = 0; i rows; i++) {

//讀取第一列中的內容

String cell = ws.getCell(0, i).getContents();

if (null != cell) {

result.add(cell.trim());

}

}

}

return result;

}

return null;

} catch (BiffException e) {

e.printStackTrace();

return null;

} catch (IndexOutOfBoundsException e) {

e.printStackTrace();

return null;

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

java如何輸出xls格式的Excel表格文件

有個開源的東東-jxl.jar,可以到下載。

一.讀取Excel文件內容

/**讀取Excel文件的內容

* @param file 待讀取的文件

* @return

*/

public static String readExcel(File file){

StringBuffer sb = new StringBuffer();

Workbook wb = null;

try {

//構造Workbook(工作薄)對象

wb=Workbook.getWorkbook(file);

} catch (BiffException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

if(wb==null)

return null;

//獲得了Workbook對象之後,就可以通過它得到Sheet(工作表)對象了

Sheet[] sheet = wb.getSheets();

if(sheet!=nullsheet.length0){

//對每個工作表進行循環

for(int i=0;isheet.length;i++){

//得到當前工作表的行數

int rowNum = sheet[i].getRows();

for(int j=0;jrowNum;j++){

//得到當前行的所有單元格

Cell[] cells = sheet[i].getRow(j);

if(cells!=nullcells.length0){

//對每個單元格進行循環

for(int k=0;kcells.length;k++){

//讀取當前單元格的值

String cellValue = cells[k].getContents();

sb.append(cellValue+” “);

}

}

sb.append(” “);

}

sb.append(” “);

}

}

//最後關閉資源,釋放內存

wb.close();

return sb.toString();

}

二.寫入Excel文件

這裡有很多格式了,比如文本內容加粗,加上某些顏色等,可以參考jxl的api,同時還推薦一篇不錯的文章:

/**生成一個Excel文件

* @param fileName 要生成的Excel文件名

*/

public static void writeExcel(String fileName){

WritableWorkbook wwb = null;

try {

//首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象

wwb = Workbook.createWorkbook(new File(fileName));

} catch (IOException e) {

e.printStackTrace();

}

if(wwb!=null){

//創建一個可寫入的工作表

//Workbook的createSheet方法有兩個參數,第一個是工作表的名稱,第二個是工作表在工作薄中的位置

WritableSheet ws = wwb.createSheet(“sheet1”, 0);

//下面開始添加單元格

for(int i=0;i10;i++){

for(int j=0;j5;j++){

//這裡需要注意的是,在Excel中,第一個參數表示列,第二個表示行

Label labelC = new Label(j, i, “這是第”+(i+1)+”行,第”+(j+1)+”列”);

try {

//將生成的單元格添加到工作表中

ws.addCell(labelC);

} catch (RowsExceededException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

}

}

try {

//從內存中寫入文件中

wwb.write();

//關閉資源,釋放內存

wwb.close();

} catch (IOException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

}

}

三.在一個Excel文件中查找是否包含某一個關鍵字

/**搜索某一個文件中是否包含某個關鍵字

* @param file 待搜索的文件

* @param keyWord 要搜索的關鍵字

* @return

*/

public static boolean searchKeyWord(File file,String keyWord){

boolean res = false;

Workbook wb = null;

try {

//構造Workbook(工作薄)對象

wb=Workbook.getWorkbook(file);

} catch (BiffException e) {

return res;

} catch (IOException e) {

return res;

}

if(wb==null)

return res;

//獲得了Workbook對象之後,就可以通過它得到Sheet(工作表)對象了

Sheet[] sheet = wb.getSheets();

boolean breakSheet = false;

if(sheet!=nullsheet.length0){

//對每個工作表進行循環

for(int i=0;isheet.length;i++){

if(breakSheet)

break;

//得到當前工作表的行數

int rowNum = sheet[i].getRows();

boolean breakRow = false;

for(int j=0;jrowNum;j++){

if(breakRow)

break;

//得到當前行的所有單元格

Cell[] cells = sheet[i].getRow(j);

if(cells!=nullcells.length0){

boolean breakCell = false;

//對每個單元格進行循環

for(int k=0;kcells.length;k++){

if(breakCell)

break;

//讀取當前單元格的值

String cellValue = cells[k].getContents();

if(cellValue==null)

continue;

if(cellValue.contains(keyWord)){

res = true;

breakCell = true;

breakRow = true;

breakSheet = true;

}

}

}

}

}

}

//最後關閉資源,釋放內存

wb.close();

return res;

}

四.往Excel中插入圖片圖標

插入圖片的實現很容易,參看以下代碼:

/**往Excel中插入圖片

* @param dataSheet 待插入的工作表

* @param col 圖片從該列開始

* @param row 圖片從該行開始

* @param width 圖片所佔的列數

* @param height 圖片所佔的行數

* @param imgFile 要插入的圖片文件

*/

public static void insertImg(WritableSheet dataSheet, int col, int row, int width,

int height, File imgFile){

WritableImage img = new WritableImage(col, row, width, height, imgFile);

dataSheet.addImage(img);

}

以上代碼的注釋已經很清楚了,大概也就不用再解釋了,我們可以用如下程序驗證:

try {

//創建一個工作薄

WritableWorkbook workbook = Workbook.createWorkbook(new File(“D:/test1.xls”));

//待插入的工作表

WritableSheet imgSheet = workbook.createSheet(“Images”,0);

//要插入的圖片文件

File imgFile = new File(“D:/1.png”);

//圖片插入到第二行第一個單元格,長寬各佔六個單元格

insertImg(imgSheet,0,1,6,6,imgFile);

workbook.write();

workbook.close();

} catch (IOException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

但是jxl只支持png格式的圖片,jpg格式和gif格式都不支持

五.插入頁眉頁腳

一般的頁眉頁腳都分為三個部分,左,中,右三部分,利用如下代碼可實現插入頁眉頁腳

/**向Excel中加入頁眉頁腳

* @param dataSheet 待加入頁眉的工作表

* @param left

* @param center

* @param right

*/

public static void setHeader(WritableSheet dataSheet,String left,String center,String right){

HeaderFooter hf = new HeaderFooter();

hf.getLeft().append(left);

hf.getCentre().append(center);

hf.getRight().append(right);

//加入頁眉

dataSheet.getSettings().setHeader(hf);

//加入頁腳

//dataSheet.getSettings().setFooter(hf);

}

我們可以用如下代碼測試該方法:

try {

//創建一個工作薄

WritableWorkbook workbook = Workbook.createWorkbook(new File(“D:/test1.xls”));

//待插入的工作表

WritableSheet dataSheet = workbook.createSheet(“加入頁眉”,0);

ExcelUtils.setHeader(dataSheet, “chb”, “2007-03-06”, “第1頁,共3頁”);

workbook.write();

workbook.close();

} catch (IOException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

六偷懶工具設計之sql2Excel

今天在公司陪山東客戶調試,遠程登錄,我在linux下什麼工具都沒有,用ssh登錄服務器,直接用mysql查詢數據庫,提出記錄中的所有漢字全是亂碼。哎,可惡的公司,不讓我用windows,要不我就可以用putty或者EMS了,我ft!

甚是不爽之下,我決定自己寫個工具了,把客戶數據庫中的數據全部提取並保存到Excel中,這樣我不就可以一目了然了嘛,嘿嘿,好吧,那我就寫一個工具吧。

第一部分就是誰都會的jdbc操作,連接數據庫,提取數據集合。

Connection con;

Statement state;

/**初始化連接

* @param serverIp

* @param dataBase

* @param userName

* @param password

* @throws ClassNotFoundException

* @throws SQLException

*/

public void init(String serverIp,String dataBase,String userName,String password) throws ClassNotFoundException, SQLException{

Class.forName(“com.mysql.jdbc.Driver”);

//配置數據源

String url=”jdbc:mysql://”+serverIp+”/”+dataBase+”?useUnicode=truecharacterEncoding=GB2312″;

con=DriverManager.getConnection(url,userName,password);

}

/**得到查詢結果集

* @param sql

* @return

* @throws SQLException

*/

public ResultSet getResultSet(String sql) throws SQLException{

state = con.createStatement();

ResultSet res = state.executeQuery(sql);

return res;

}

/**關閉連接

* @throws SQLException

*/

public void close() throws SQLException{

if(con!=null)

con.close();

if(state!=null)

state.close();

}

第二部分就是把ResultSet中的記錄寫入一個Excel文件

操作Excel,我用的是jxl,不熟的同學可以參考:利用java操作Excel文件

/**將查詢結果寫入Excel文件中

* @param rs

* @param file

* @throws SQLException

*/

public void writeExcel(ResultSet rs,File file) throws SQLException{

WritableWorkbook wwb = null;

try{

//首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象

wwb = Workbook.createWorkbook(file);

} catch (IOException e){

e.printStackTrace();

}

if(wwb!=null){

WritableSheet ws = wwb.createSheet(“sheet1”, 0);

int i=0;

while(rs.next()){

Label label1 = new Label(0, i, rs.getString(“id”));

Label label2 = new Label(1, i, rs.getString(“category”));

try {

ws.addCell(label1);

ws.addCell(label2);

} catch (RowsExceededException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

i++;

}

try {

//從內存中寫入文件中

wwb.write();

//關閉資源,釋放內存

wwb.close();

} catch (IOException e) {

e.printStackTrace();

} catch (WriteException e){

e.printStackTrace();

}

}

}

測試程序:

Sql2Excel se = new Sql2Excel();

try {

se.init(“127.0.0.1″,”mydabase”, “root”, “1234”);

ResultSet rs = se.getResultSet(“select id,category from xx “);

se.writeExcel(rs, new File(“/root/sql2excel.xls”));

se.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/285164.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:43
下一篇 2024-12-22 15:43

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • 心形照片拼圖模板

    如何使用心形照片拼圖模板 一、模板介紹 心形照片拼圖模板是一種讓用戶可以將自己的照片拼接成一個心形的巧妙設計,每個照片都是一個拼圖塊,當所有的照片配合完成時,呈現出一個完整的心形。…

    編程 2025-04-29

發表回復

登錄後才能評論