java上傳excel並讀取文件
A. 從excel表格讀取數據用java代碼實現批量上傳寫入資料庫
java操作Excel的一種方法:在開源世界中,有兩套比較有影響的API可供使用,一個是POI,一個是jExcelAPI。其中jExcelAPI是一個韓國程序員的作品,雖然沒有POI那樣血統高貴,但是在使用過程中,感覺簡單方便,對中文支持非常好,功能也比較強大。它的下載地址是: http://www.andykhan.com/jexcelapi/ 當前的最高版本是2.4。作者的網站上對它的特徵有如下描述:
● 支持Excel 95-2000的所有版本
● 生成Excel 2000標准格式
● 支持字體、數字、日期操作
● 能夠修飾單元格屬性
● 支持圖像和圖表
搭建環境
將下載後的文件解包,得到jxl.jar,放入classpath,安裝就完成了。
基本操作
一、創建文件
擬生成一個名為「測試數據.xls」的Excel文件,其中第一個工作表被命名為「第一頁」,大致效果如下:
代碼(CreateXLS.java):
//生成Excel的類
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
{
try
{
//打開文件
WritableWorkbook book=
Workbook.createWorkbook(new File(「測試.xls」));
//生成名為「第一頁」的工作表,參數0表示這是第一頁
WritableSheet sheet=book.createSheet(「第一頁」,0);
//在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
//以及單元格內容為test
Label label=new Label(0,0,」test」);
//將定義好的單元格添加到工作表中
sheet.addCell(label);
/*生成一個保存數字的單元格
必須使用Number的完整包路徑,否則有語法歧義
單元格位置是第二列,第一行,值為789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//寫入數據並關閉文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
編譯執行後,會在當前位置產生一個Excel文件。
三、讀取文件
以剛才我們創建的Excel文件為例,做一個簡單的讀取操作,程序代碼如下:
//讀取Excel的類
import java.io.*;
import jxl.*;
public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(「測試.xls」));
//獲得第一個工作表對象
Sheet sheet=book.getSheet(0);
//得到第一列第一行的單元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
程序執行結果:test
四、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的時候,除了打開文件的方式不同之外,其他操作和創建Excel是一樣的。下面的例子是在我們已經生成的Excel文件中添加一個工作表:
//修改Excel的類,添加一個工作表
import java.io.*;
import jxl.*;
import jxl.write.*;
public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel獲得文件
Workbook wb=Workbook.getWorkbook(new File(「測試.xls」));
//打開一個文件的副本,並且指定數據寫回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(「測試.xls」),wb);
//添加一個工作表
WritableSheet sheet=book.createSheet(「第二頁」,1);
sheet.addCell(new Label(0,0,」第二頁的測試數據」));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
執行結果如圖:
高級操作
一、 數據格式化
在Excel中不涉及復雜的數據類型,能夠比較好的處理字串、數字和日期已經能夠滿足一般的應用。
1、 字串格式化
字元串的格式化涉及到的是字體、粗細、字型大小等元素,這些功能主要由WritableFont和WritableCellFormat類來負責。假設我們在生成一個含有字串的單元格時,使用如下語句,為方便敘述,我們為每一行命令加了編號:
WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①
WritableCellFormat format1=new WritableCellFormat(font1); ②
Label label=new Label(0,0,」data 4 test」,format1) ③
其中①指定了字串格式:字體為TIMES,字型大小16,加粗顯示。WritableFont有非常豐富的構造子,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。
②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種屬性,後面的單元格格式化中會有更多描述。
③處使用了Label類的構造子,指定了字串被賦予那種格式。
在WritableCellFormat類中,還有一個很重要的方法是指定數據的對齊方式,比如針對我們上面的實例,可以指定:
//把水平對齊方式指定為居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直對齊方式指定為居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、單元格操作
Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合並等,所幸jExcelAPI提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關的API。
1、 合並單元格
WritableSheet.mergeCells(int m,int n,int p,int q);
作用是從(m,n)到(p,q)的單元格全部合並,比如:
WritableSheet sheet=book.createSheet(「第一頁」,0);
//合並第一列第一行到第六列第一行的所有單元格
sheet.mergeCells(0,0,5,0);
合並既可以是橫向的,也可以是縱向的。合並後的單元格不能再次進行合並,否則會觸發異常。
2、 行高和列寬
WritableSheet.setRowView(int i,int height);
作用是指定第i+1行的高度,比如:
//將第一行的高度設為200
sheet.setRowView(0,200); 能夠獲取到java裡面那麼再封裝保存進資料庫也就簡單了,希望這樣可以幫到你。
B. java web 怎麼導入excel文件
1.要正確的將Web客戶端的Excel文件導入到伺服器的資料庫中,需要將客戶端的Excel文件上傳到伺服器上。可以使用FileUpload控制項完成。2.Excel文件上傳到伺服器指定的目錄中,這里假設是該站點的upfiles目錄中。3.使用SQL語句從upfiles目錄中的上傳Excel文件中讀取數據顯示或寫入資料庫。
C. 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();
}
}
}
D. 怎樣通過JSP頁面上傳個Excel文件,並實現Java讀取EXCEL存入資料庫
1。通過jsp頁面接收上傳的excel文件到後台,
2,後台使用java連接資料庫
3.將excel文件通過io文件控制流讀入,然後使用jdbc寫入到資料庫
E. 如何用JAVA把EXCEL表格讀出來(不用資料庫)
public class Excel {
private jxl.Workbook rwb = null;
/**
* 得到當前工作薄的總列數
*
* @parma sheetIndex 工作薄號
* @return int
*/
public int getColCount(int sheetIndex) {
int colCnt = 0;
try {
jxl.Sheet rs = rwb.getSheet(sheetIndex);
colCnt = rs.getColumns();
} catch (Exception e) {
colCnt = 0;
} finally {
try {
} catch (Exception e) {
colCnt = 0;
}
}
return colCnt;
}
/**
* 得到當前工作薄的總行數
*
* @parma sheetIndex 工作薄號
* @return int
*/
public int getRowCount(int sheetIndex) {
int colCnt = 0;
try {
jxl.Sheet rs = rwb.getSheet(sheetIndex);
colCnt = rs.getRows();
} catch (Exception e) {
colCnt = 0;
} finally {
try {
} catch (Exception e) {
colCnt = 0;
}
}
return colCnt;
}
/**
* 打開Excel.
*
* @parma fileName Excel文件名+文件路徑(絕對路徑)
* @return boolean
*/
public boolean openExcel(String fileName) {
boolean Rtn = false;
try {
is = new FileInputStream(fileName);
rwb = Workbook.getWorkbook(is);
Rtn = true;
} catch (Exception e) {
Rtn = false;
} finally {
try {} catch (Exception e) {}
}
return Rtn;
}
/**
* 取得某個單元格的內容。不論單元格是何種數據類型都將返回字元型。
*
* @parma int col 列號 int row 行號
* @return String
*/
public String getCellContent(int col, int row) {
String cellContent = "";
try {
// 默認打開第一張工作薄。
Sheet rs = rwb.getSheet(0);
// 取得某一單元格的內容
Cell c00 = rs.getCell(col, row);
cellContent = c00.getContents();
} catch (Exception e) {
cellContent = "";
} finally {
try {
} catch (Exception e) {
cellContent = "";
}
}
return cellContent;
}
public static void main(String[] args) {
Excel ex = new Excel();
ex.openExcel("你自己的*.xls");
for (int i = 1; i < ex.getRowCount(0); i++) {
for (int j = 0; j < ex.getColCount(0); j++) {
System.out.println(ex.getCellContent(j, i));
}
}
}
}