java操作excel報錯(java @excel)

本文目錄一覽:

java讀寫excel是報錯

狗子,你這挺糾結的,一、沒有源代碼,誰知道你到底什麼意思,很多時候錯誤是一致的,附加上源碼吧。 二、你給的分太少了,你也太摳門了吧,也就我可憐可憐你給你看看,可惜你沒源碼,我看個球啊。

java:讀取Excel錯誤

異常已經寫的很清楚了 ArrayIndexOutOfBoundsException

你的數組訪問越界了

java中poi讀取excel時報錯:Unable to construct record instance,怎麼解決呀?

根據你的截圖,錯誤的可能有兩個,要分別測試對應一下:

1、excel文檔有問題,從截圖下方看(就是亂碼部分)可能excel文檔的第1個sheet是個被刪除的sheet,所以名稱是很長的亂碼,導致無法讀取。

修改方法:創建一個新的excel文檔,然後將需要的內容以文本的形式複製進去,再調用。

2、poi的問題,這個有可能是poi和excel的版本不對應。

修改方法:下載poi的時候確定清楚裡面的hkec訪問版本對應的是不是你的excel文件的版本。

java讀取excel報錯

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴展名是.xls

XSSFWorkbook:是操作Excel2007的版本,擴展名是.xlsx

換成excel2007 試試

急!!!java用poi導出excel文件,打開導出的文件時報錯「文件錯誤,數據可能丟失」

兩個原因:

1.你的excel模版本身有問題,可以嘗試新建一個模版。

2.你的excel使用了一些POI不支持的函數。

解決辦法:

另存是由excel重寫了完整的文件,可以解決問題。

關閉文件例子:

FileOutputStream os = new FileOutputStream(“workbook.xls”);

wb.write(os);

os.close();

在保護狀態下execl的格式有可能正在被使用,你這邊修改,準確說是線程衝突,一般excel值會作為導出文件的模板,是不會編輯的。你可以在讀的時候判斷execl是否正在被使用。

下面的代碼問題,你可以參考

package com.hwt.glmf.common;

import java.io.IOException;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.http.HttpServletResponse;

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

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

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

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

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

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

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

import org.apache.poi.hssf.util.CellRangeAddress;

import org.apache.poi.hssf.util.HSSFColor;

/**

* 導出Excel公共方法

* @version 1.0

*

* @author wangcp

*

*/

public class ExportExcel extends BaseAction {

//顯示的導出表的標題

private String title;

//導出表的列名

private String[] rowName ;

private ListObject[] dataList = new ArrayListObject[]();

HttpServletResponse response;

//構造方法,傳入要導出的數據

public ExportExcel(String title,String[] rowName,ListObject[] dataList){

this.dataList = dataList;

this.rowName = rowName;

this.title = title;

}

/*

* 導出數據

* */

public void export() throws Exception{

try{

HSSFWorkbook workbook = new HSSFWorkbook(); // 創建工作簿對象

HSSFSheet sheet = workbook.createSheet(title); // 創建工作表

// 產生表格標題行

HSSFRow rowm = sheet.createRow(0);

HSSFCell cellTiltle = rowm.createCell(0);

//sheet樣式定義【getColumnTopStyle()/getStyle()均為自定義方法 – 在下面 – 可擴展】

HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//獲取列頭樣式對象

HSSFCellStyle style = this.getStyle(workbook); //單元格樣式對象

sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));

cellTiltle.setCellStyle(columnTopStyle);

cellTiltle.setCellValue(title);

// 定義所需列數

int columnNum = rowName.length;

HSSFRow rowRowName = sheet.createRow(2); // 在索引2的位置創建行(最頂端的行開始的第二行)

// 將列頭設置到sheet的單元格中

for(int n=0;ncolumnNum;n++){

HSSFCell cellRowName = rowRowName.createCell(n); //創建列頭對應個數的單元格

cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //設置列頭單元格的數據類型

HSSFRichTextString text = new HSSFRichTextString(rowName[n]);

cellRowName.setCellValue(text); //設置列頭單元格的值

cellRowName.setCellStyle(columnTopStyle); //設置列頭單元格樣式

}

//將查詢出的數據設置到sheet對應的單元格中

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

Object[] obj = dataList.get(i);//遍歷每個對象

HSSFRow row = sheet.createRow(i+3);//創建所需的行數

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

HSSFCell cell = null; //設置單元格的數據類型

if(j == 0){

cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);

cell.setCellValue(i+1);

}else{

cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);

if(!””.equals(obj[j]) obj[j] != null){

cell.setCellValue(obj[j].toString()); //設置單元格的值

}

}

cell.setCellStyle(style); //設置單元格樣式

}

}

//讓列寬隨著導出的列長自動適應

for (int colNum = 0; colNum columnNum; colNum++) {

int columnWidth = sheet.getColumnWidth(colNum) / 256;

for (int rowNum = 0; rowNum sheet.getLastRowNum(); rowNum++) {

HSSFRow currentRow;

//當前行未被使用過

if (sheet.getRow(rowNum) == null) {

currentRow = sheet.createRow(rowNum);

} else {

currentRow = sheet.getRow(rowNum);

}

if (currentRow.getCell(colNum) != null) {

HSSFCell currentCell = currentRow.getCell(colNum);

if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {

int length = currentCell.getStringCellValue().getBytes().length;

if (columnWidth length) {

columnWidth = length;

}

}

}

}

if(colNum == 0){

sheet.setColumnWidth(colNum, (columnWidth-2) * 256);

}else{

sheet.setColumnWidth(colNum, (columnWidth+4) * 256);

}

}

if(workbook !=null){

try

{

String fileName = “Excel-” + String.valueOf(System.currentTimeMillis()).substring(4, 13) + “.xls”;

String headStr = “attachment; filename=\”” + fileName + “\””;

response = getResponse();

response.setContentType(“APPLICATION/OCTET-STREAM”);

response.setHeader(“Content-Disposition”, headStr);

OutputStream out = response.getOutputStream();

workbook.write(out);

}

catch (IOException e)

{

e.printStackTrace();

}

}

}catch(Exception e){

e.printStackTrace();

}

}

/*

* 列頭單元格樣式

*/

public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

// 設置字體

HSSFFont font = workbook.createFont();

//設置字體大小

font.setFontHeightInPoints((short)11);

//字體加粗

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

//設置字體名字

font.setFontName(“Courier New”);

//設置樣式;

HSSFCellStyle style = workbook.createCellStyle();

//設置底邊框;

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

//設置底邊框顏色;

style.setBottomBorderColor(HSSFColor.BLACK.index);

//設置左邊框;

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

//設置左邊框顏色;

style.setLeftBorderColor(HSSFColor.BLACK.index);

//設置右邊框;

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

//設置右邊框顏色;

style.setRightBorderColor(HSSFColor.BLACK.index);

//設置頂邊框;

style.setBorderTop(HSSFCellStyle.BORDER_THIN);

//設置頂邊框顏色;

style.setTopBorderColor(HSSFColor.BLACK.index);

//在樣式用應用設置的字體;

style.setFont(font);

//設置自動換行;

style.setWrapText(false);

//設置水平對齊的樣式為居中對齊;

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

//設置垂直對齊的樣式為居中對齊;

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

return style;

}

/*

* 列數據信息單元格樣式

*/

public HSSFCellStyle getStyle(HSSFWorkbook workbook) {

// 設置字體

HSSFFont font = workbook.createFont();

//設置字體大小

//font.setFontHeightInPoints((short)10);

//字體加粗

//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

//設置字體名字

font.setFontName(“Courier New”);

//設置樣式;

HSSFCellStyle style = workbook.createCellStyle();

//設置底邊框;

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

//設置底邊框顏色;

style.setBottomBorderColor(HSSFColor.BLACK.index);

//設置左邊框;

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

//設置左邊框顏色;

style.setLeftBorderColor(HSSFColor.BLACK.index);

//設置右邊框;

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

//設置右邊框顏色;

style.setRightBorderColor(HSSFColor.BLACK.index);

//設置頂邊框;

style.setBorderTop(HSSFCellStyle.BORDER_THIN);

//設置頂邊框顏色;

style.setTopBorderColor(HSSFColor.BLACK.index);

//在樣式用應用設置的字體;

style.setFont(font);

//設置自動換行;

style.setWrapText(false);

//設置水平對齊的樣式為居中對齊;

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

//設置垂直對齊的樣式為居中對齊;

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

return style;

}

}

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

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

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

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

    編程 2025-04-29
  • Java JsonPath 效率優化指南

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

    編程 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
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 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

發表回復

登錄後才能評論