當前位置:首頁 » 編程語言 » java中讀取excel

java中讀取excel

發布時間: 2022-08-06 21:03:30

A. java中怎樣從Excel中讀寫數據

JavaEXCELAPI簡介
JavaExcel是一開放源碼項目,通過它Java開發人員可以讀取Excel文件的內容、創建新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操作系統也可以通過純Java應用來處理Excel數據表。因為是使用Java編寫的,所以我們在Web應用中可以通過JSP、Servlet來調用API實現對Excel數據表的訪問

應用示例
從Excel文件讀取數據表

Java ExcelAPI既可以從本地文件系統的一個文件(.xls),也可以從輸入流中讀取Excel數據表。讀取Excel數據表的第一步是創建Workbook(術語:工作薄),下面的代碼片段舉例說明了應該如何操作: 需要用到一個開源的jar包,jxl.jar。

Filefile=newFile("c:\a.xls");
InputStreamin=newFileInputStream(file);
Workbookworkbook=Workbook.getWorkbook(in);
//獲取第一張Sheet表
Sheetsheet=workbook.getSheet(0);

//我們既可能通過Sheet的名稱來訪問它,也可以通過下標來訪問它。如果通過下標來訪問的話,要注意的一點是下標從0開始,就像數組一樣。
//獲取第一行,第一列的值
Cellc00=rs.getCell(0,0);
Stringstrc00=c00.getContents();
//獲取第一行,第二列的值
Cellc10=rs.getCell(1,0);
Stringstrc10=c10.getContents();
//我們可以通過指定行和列得到指定的單元格Cell對象
Cellcell=sheet.getCell(column,row);
//也可以得到某一行或者某一列的所有單元格Cell對象
Cell[]cells=sheet.getColumn(column);
Cell[]cells2=sheet.getRow(row);
//然後再取每一個Cell中的值
Stringcontent=cell.getContents();

B. 用java怎麼從excel表中讀數據

packagecn.htp.util;

importjava.io.FileInputStream;
importjava.text.SimpleDateFormat;

importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.DateUtil;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.apache.poi.xssf.usermodel.XSSFWorkbook;

/*
*導入jar包(應該不全你自己再搜搜)
*poi-3.16-beta1.jar
*
*poi-examples-3.16-beta1.jar
*
*poi-excelant-3.16-beta1.jar
*
*poi-ooxml-3.16-beta1.jar
*
*poi-ooxml-schemas-3.16-beta1.jar
*
*poi-scratchpad-3.16-beta1.jar
*
*curvesapi-1.04.jar
*
*xmlbeans-2.6.0.jar
*
*
*/
publicclassReadExcel{

publicstaticvoidmain(String[]args)throwsException{

FileInputStreamin=newFileInputStream("D:\demo\test.xlsx");
//excel對象
XSSFWorkbookexcel=newXSSFWorkbook(in);
//循環工作簿
e_sheet:for(ints=0;s<excel.getNumberOfSheets();s++){
Sheete_sheet=excel.getSheetAt(s);
if(e_sheet==null){
continuee_sheet;
}
intl_r_num=e_sheet.getLastRowNum();
//循環行
e_row:for(intr=0;r<l_r_num+1;r++){
Rowe_row=e_sheet.getRow(r);
if(e_row==null){
continuee_row;
}
intc_num=e_row.getLastCellNum();
//循環列
e_cell:for(intc=0;c<c_num;c++){
Celle_cell=e_row.getCell(c);
if(e_cell==null){
continuee_cell;
}
//自己定義的讀數據的方法都是String
Stringvalue=getCellData(e_cell);
System.out.print(value+",");
}
System.out.println();
}
}
}


(Cellcell){
Stringvalue=null;
if(cell==null){
returnvalue;
}
switch(cell.getCellType()){
caseCell.CELL_TYPE_STRING:
value=cell.getRichStringCellValue().getString();
break;
caseCell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)){
SimpleDateFormatformat=newSimpleDateFormat("YYYY/MM/dd");
value=format.format(cell.getDateCellValue());
}else{
value=String.valueOf(cell.getNumericCellValue());
}
break;
caseCell.CELL_TYPE_BOOLEAN:
value=cell.getBooleanCellValue()?"true":"false";
break;
caseCell.CELL_TYPE_FORMULA:
try{
value=String.valueOf(cell.getNumericCellValue());
}catch(IllegalStateExceptione){
value=String.valueOf(cell.getRichStringCellValue());
}
break;
}
returnvalue;
}
}

C. java如何讀取整個excel文件的內容

在java程序添加spire.xls.jar依賴

importcom.spire.xls.*;

publicclassReadExcel{
publicstaticvoidmain(String[]args){

//創建Workbook對象
Workbookwb=newWorkbook();
//載入一個Excel文檔
wb.loadFromFile("C:\Users\Administrator\Desktop\test.xlsx");
//獲取第一個工作表
Worksheetsheet=wb.getWorksheets().get(0);
//遍歷工作表的每一行
for(inti=1;i<sheet.getLastRow()+1;i++){
//遍歷工作的每一列
for(intj=1;j<sheet.getLastColumn()+1;j++){
//輸出指定單元格的數據
System.out.print(sheet.get(i,j).getText());
System.out.print(" ");
}
System.out.print(" ");
}
}
}

D. java中怎麼讀取excel文件

package com.jqgj.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FilenameUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
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.xssf.usermodel.XSSFWorkbook;

public class ImportNameTest {
/**
* Excel 2003
*/
private final static String XLS = "xls";
/**
* Excel 2007
*/
private final static String XLSX = "xlsx";
/**
* 分隔符
*/
private final static String SEPARATOR = "|";

/**
* 由Excel文件的Sheet導出至List
*
* @param file
* @param sheetNum
* @return
*/
public static List<String> exportListFromExcel(File file, int sheetNum)
throws IOException {
return exportListFromExcel(new FileInputStream(file),
FilenameUtils.getExtension(file.getName()), sheetNum);
}
/**
* 由Excel流的Sheet導出至List
*
* @param is
* @param extensionName
* @param sheetNum
* @return
* @throws IOException
*/
public static List<String> exportListFromExcel(InputStream is,
String extensionName, int sheetNum) throws IOException {

Workbook workbook = null;

if (extensionName.toLowerCase().equals(XLS)) {
workbook = new HSSFWorkbook(is);
} else if (extensionName.toLowerCase().equals(XLSX)) {
workbook = new XSSFWorkbook(is);
}

return exportListFromExcel(workbook, sheetNum);
}
/**
* 由指定的Sheet導出至List
*
* @param workbook
* @param sheetNum
* @return
* @throws IOException
*/
private static List<String> exportListFromExcel(Workbook workbook,
int sheetNum) {

Sheet sheet = workbook.getSheetAt(sheetNum);

// 解析公式結果
FormulaEvaluator evaluator = workbook.getCreationHelper()
.createFormulaEvaluator();

List<String> list = new ArrayList<String>();

int minRowIx = sheet.getFirstRowNum();
int maxRowIx = sheet.getLastRowNum();
for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) {
Row row = sheet.getRow(rowIx);
StringBuilder sb = new StringBuilder();

short minColIx = row.getFirstCellNum();
short maxColIx = row.getLastCellNum();
for (short colIx = minColIx; colIx <= maxColIx; colIx++) {
Cell cell = row.getCell(new Integer(colIx));
CellValue cellValue = evaluator.evaluate(cell);
if (cellValue == null) {
continue;
}
// 經過公式解析,最後只存在Boolean、Numeric和String三種數據類型,此外就是Error了
// 其餘數據類型,根據官方文檔,完全可以忽略http://poi.apache.org/spreadsheet/eval.html
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
sb.append(SEPARATOR + cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
// 這里的日期類型會被轉換為數字類型,需要判別後區分處理
if (DateUtil.isCellDateFormatted(cell)) {
sb.append(SEPARATOR + cell.getDateCellValue());
} else {
//把手機號碼轉換為字元串
DecimalFormat df = new DecimalFormat("#");
sb.append(SEPARATOR + df.format(cellValue.getNumberValue()));
}
break;
case Cell.CELL_TYPE_STRING:
sb.append(SEPARATOR + cellValue.getStringValue());
break;
case Cell.CELL_TYPE_FORMULA:
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;
default:
break;
}
}
list.add(sb.toString());
}
return list;
}

/**
* @param args
*/
public static void main(String[] args) {
String path = "f:\\telName.xlsx";
try {
List<String> listS= exportListFromExcel(new File(path),0);
for(int i=0;i<listS.size();i++){
System.out.println(listS.get(i));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

E. JAVA讀取EXCEL文件

你可以用一個int集合去存儲每個編碼的初始位置,然後每次讀取就從這個int集合中讀取指定范圍內的內容,(注意,在讀取的時候,獲取全部行的函數會把部分空行也讀取出來,這個要記得做處理,一般會出現在集合最後一條)

F. java怎麼讀取excel文件里的數據

下面是一個簡單的讀取例子,如果報「java.io.IOException: Invalid header signature; read 4503608217567241, expected -2226271756974174256」之類的異常請用Excel打開(如果能打的開的話)然後另存為一下。

http://www.jb51.net/article/43713.htm

importjava.io.BufferedInputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.text.DecimalFormat;
importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Date;
importjava.util.List;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFDateUtil;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.poifs.filesystem.POIFSFileSystem;
publicclassTest0{
/**
*@paramargs
*@throwsIOException
*@throwsFileNotFoundException
*/
publicstaticvoidmain(String[]args)throwsFileNotFoundException,
IOException{
Filefile=newFile("C://test01.xls");//Excel文件路徑
String[][]result=getData(file,1);
introwLength=result.length;
for(inti=0;i<rowLength;i++){
for(intj=0;j<result[i].length;j++){
System.out.print(result[i][j]+" ");
}
System.out.println();
}
}
/**
*讀取Excel的內容,第一維數組存儲的是一行中格列的值,二維數組存儲的是多少個行
*
*@paramfile
*讀取數據的源Excel
*@paramignoreRows
*讀取數據忽略的行數,比喻行頭不需要讀入忽略的行數為1
*@return讀出的Excel中數據的內容
*@throwsFileNotFoundException
*@throwsIOException
*/
publicstaticString[][]getData(Filefile,intignoreRows)
throwsFileNotFoundException,IOException{
List<String[]>result=newArrayList<String[]>();
introwSize=0;
BufferedInputStreamin=newBufferedInputStream(newFileInputStream(
file));
//打開HSSFWorkbook
POIFSFileSystemfs=newPOIFSFileSystem(in);
HSSFWorkbookwb=newHSSFWorkbook(fs);
HSSFCellcell=null;
for(intsheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++){
HSSFSheetst=wb.getSheetAt(sheetIndex);
//第一行為標題,不取
for(introwIndex=ignoreRows;rowIndex<=st.getLastRowNum();rowIndex++){
HSSFRowrow=st.getRow(rowIndex);
if(row==null){
continue;
}
inttempRowSize=row.getLastCellNum()+1;
if(tempRowSize>rowSize){
rowSize=tempRowSize;
}
String[]values=newString[rowSize];
Arrays.fill(values,"");
booleanhasValue=false;
for(shortcolumnIndex=0;columnIndex<=row.getLastCellNum();columnIndex++){
Stringvalue="";
cell=row.getCell(columnIndex);
if(cell!=null){
//注意:一定要設成這個,否則可能會出現亂碼
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
switch(cell.getCellType()){
caseHSSFCell.CELL_TYPE_STRING:
value=cell.getStringCellValue();
break;
caseHSSFCell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
Datedate=cell.getDateCellValue();
if(date!=null){
value=newSimpleDateFormat("yyyy-MM-dd")
.format(date);
}else{
value="";
}
}else{
value=newDecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
caseHSSFCell.CELL_TYPE_FORMULA:
//導入時如果為公式生成的數據則無值
if(!cell.getStringCellValue().equals("")){
value=cell.getStringCellValue();
}else{
value=cell.getNumericCellValue()+"";
}
break;
caseHSSFCell.CELL_TYPE_BLANK:
break;
caseHSSFCell.CELL_TYPE_ERROR:
value="";
break;
caseHSSFCell.CELL_TYPE_BOOLEAN:
value=(cell.getBooleanCellValue()==true?"Y"
:"N");
break;
default:
value="";
}
}
if(columnIndex==0&&value.trim().equals("")){
break;
}
values[columnIndex]=rightTrim(value);
hasValue=true;
}
if(hasValue){
result.add(values);
}
}
}
in.close();
String[][]returnArray=newString[result.size()][rowSize];
for(inti=0;i<returnArray.length;i++){
returnArray[i]=(String[])result.get(i);
}
returnreturnArray;
}
/**
*去掉字元串右邊的空格
*
*@paramstr
*要處理的字元串
*@return處理後的字元串
*/
publicstaticStringrightTrim(Stringstr){
if(str==null){
return"";
}
intlength=str.length();
for(inti=length-1;i>=0;i--){
if(str.charAt(i)!=0x20){
break;
}
length--;
}
returnstr.substring(0,length);
}
}

G. java讀取excle文件

debug跟蹤一下下面幾處:
1)是否讀取到excel文件。
2)
int rowNum = childSheet.getLastRowNum(); //獲取當前sheet有多少行,看看有多少行,是否和excel中數據行數一致。
3)
int cellNum=row.getLastCellNum(); //每行有多少列(格),看看每條數據的數據項多少是否和excel中一致。
順便說下,樓上的說的你把讀取excel代碼給注釋掉了,去掉注釋看看。(下面幾行)
// for(int k=0;k<cellNum;k++) //此循環用來規范數據,如果某個格子里沒有數據為空, 則替換成--
// {
// rows[k]=row.getCell(k)==null ? " -- " : row.getCell(k).toString();
// }

H. java怎麼讀取上傳的excel文件

java怎麼讀取上傳的excel文件,解決辦法:

  1. 添加jar文件,java導入導出Excel文件要引入jxl.jar包,最關鍵的是這套API是純Java的,並不依賴Windows系統,即使運行在Linux下,它同樣能夠正確的處理Excel文件。

  2. jxl對Excel表格的認識,每個單元格的位置認為是由一個二維坐標(i,j)給定,其中i表示列,j表示行,並且從上到下遞增,從左到右遞增。

  3. 對於合並單元格的以最左,最上的單元格的坐標為准。如下圖中t.xls,一班名單(0,0),陳茵(1,2),陳開先(1,6)。


I. java怎麼讀取excel文件

參考代碼及注釋如下:

importJava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;

importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.apache.poi.ss.usermodel.Workbook;
publicclassReadExcel{
publicstaticvoidreadExcel(Filefile){
try{
InputStreaminputStream=newFileInputStream(file);
StringfileName=file.getName();
Workbookwb=null;
//poi-3.9.jar只可以讀取2007以下的版本,後綴為:xsl
wb=newHSSFWorkbook(inputStream);//解析xls格式

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

intfirstRowIndex=sheet.getFirstRowNum();
intlastRowIndex=sheet.getLastRowNum();
for(intrIndex=firstRowIndex;rIndex<=lastRowIndex;rIndex++){
Rowrow=sheet.getRow(rIndex);
if(row!=null){
intfirstCellIndex=row.getFirstCellNum();
//intlastCellIndex=row.getLastCellNum();
//此處參數cIndex決定可以取到excel的列數。
for(intcIndex=firstCellIndex;cIndex<3;cIndex++){
Cellcell=row.getCell(cIndex);
Stringvalue="";
if(cell!=null){
value=cell.toString();
System.out.print(value+" ");
}
}
System.out.println();
}
}
}catch(FileNotFoundExceptione){
//TODO自動生成catch塊
e.printStackTrace();
}catch(IOExceptione){
//TODO自動生成catch塊
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
Filefile=newFile("D:/test.xls");
readExcel(file);
}
}

J. java怎麼讀取excel數據

引入poi的jar包,大致如下:

importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.math.BigDecimal;
importjava.text.DecimalFormat;
importjava.text.SimpleDateFormat;

importorg.apache.poi.xssf.usermodel.XSSFCell;
importorg.apache.poi.xssf.usermodel.XSSFRow;
importorg.apache.poi.xssf.usermodel.XSSFSheet;
importorg.apache.poi.xssf.usermodel.XSSFWorkbook;

publicclassExcelUtil2007{
/**讀取excel文件流的指定索引的sheet
*@paraminputStreamexcel文件流
*@paramsheetIndex要讀取的sheet的索引
*@return
*@throwsFileNotFoundException
*@throwsIOException
*/
(InputStreaminputStream,intsheetIndex)throwsFileNotFoundException,IOException
{
returnreadExcel(inputStream).getSheetAt(sheetIndex);
}
/**讀取excel文件的指定索引的sheet
*@paramfilePathexcel文件路徑
*@paramsheetIndex要讀取的sheet的索引
*@return
*@throwsIOException
*@throwsFileNotFoundException
*/
(StringfilePath,intsheetIndex)throwsFileNotFoundException,IOException
{
returnreadExcel(filePath).getSheetAt(sheetIndex);
}
/**讀取excel文件的指定索引的sheet
*@paramfilePathexcel文件路徑
*@paramsheetName要讀取的sheet的名稱
*@return
*@throwsIOException
*@throwsFileNotFoundException
*/
(StringfilePath,StringsheetName)throwsFileNotFoundException,IOException
{
returnreadExcel(filePath).getSheet(sheetName);
}
/**讀取excel文件,返回XSSFWorkbook對象
*@paramfilePathexcel文件路徑
*@return
*@throwsFileNotFoundException
*@throwsIOException
*/
(StringfilePath)throwsFileNotFoundException,IOException
{
XSSFWorkbookwb=newXSSFWorkbook(newFileInputStream(filePath));
returnwb;
}
/**讀取excel文件流,返回XSSFWorkbook對象
*@paraminputStreamexcel文件流
*@return
*@throwsFileNotFoundException
*@throwsIOException
*/
(InputStreaminputStream)throwsFileNotFoundException,IOException
{
XSSFWorkbookwb=newXSSFWorkbook(inputStream);
returnwb;
}
/***讀取excel中指定的單元格,並返回字元串形式的值
*1.數字
*2.字元
*3.公式(返回的為公式內容,非單元格的值)
*4.空
*@paramst要讀取的sheet對象
*@paramrowIndex行索引
*@paramcolIndex列索引
*@paramisDate是否要取的是日期(是則返回yyyy-MM-dd格式的字元串)
*@return
*/
(XSSFSheetst,introwIndex,intcolIndex,booleanisDate){
Strings="";
XSSFRowrow=st.getRow(rowIndex);
if(row==null)return"";
XSSFCellcell=row.getCell(colIndex);
if(cell==null)return"";
if(cell.getCellType()==0){//數字
if(isDate)s=newSimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
elses=trimPointO(String.valueOf(getStringValue(cell)).trim());
}elseif(cell.getCellType()==1){//字元(excel中的空格,不是全形,也不是半形,不知道是神馬,反正就是""這個)
s=cell.getRichStringCellValue().getString().replaceAll("","").trim();
// s=cell.getStringCellValue();//07API新增,好像跟上一句一致
}
elseif(cell.getCellType()==2){//公式
s=cell.getCellFormula();
}
elseif(cell.getCellType()==3){//空
s="";
}
returns;
}
/**如果數字以.0結尾,則去掉.0
*@params
*@return
*/
publicstaticStringtrimPointO(Strings){
if(s.endsWith(".0"))
returns.substring(0,s.length()-2);
else
returns;
}

/**處理科學計數法和百分比模式的數字單元格
*@paramcell
*@return
*/
(XSSFCellcell){
StringsValue=null;
shortdataFormat=cell.getCellStyle().getDataFormat();
doubled=cell.getNumericCellValue();
BigDecimalb=newBigDecimal(Double.toString(d));
//百分比樣式的
if(dataFormat==0xa||dataFormat==9){
b=b.multiply(newBigDecimal(100));
//Stringtemp=b.toPlainString();
DecimalFormatdf=newDecimalFormat("0.00");//保留兩位小數的百分比格式
sValue=df.format(b)+"%";
}else{
sValue=b.toPlainString();
}
returnsValue;
}
}

熱點內容
thinkphp緩存關閉 發布:2024-04-26 18:19:32 瀏覽:96
linux信號捕捉 發布:2024-04-26 18:19:27 瀏覽:934
編譯有哪兩種模式 發布:2024-04-26 17:53:30 瀏覽:871
伺服器電腦上能用嗎 發布:2024-04-26 17:44:42 瀏覽:560
組件式編程 發布:2024-04-26 17:19:57 瀏覽:943
電子兒童存錢罐如何改密碼 發布:2024-04-26 17:19:13 瀏覽:601
什麼安卓手機直播投屏好 發布:2024-04-26 17:18:31 瀏覽:627
linuxhba查看 發布:2024-04-26 16:57:28 瀏覽:903
啟動mongodb服務linux 發布:2024-04-26 16:38:37 瀏覽:553
525標軸選裝哪些配置 發布:2024-04-26 16:34:24 瀏覽:849