當前位置:首頁 » 數據倉庫 » java導入excel到資料庫poi
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java導入excel到資料庫poi

發布時間: 2023-04-15 01:40:50

① java利用poi技術導入批量excel數據,並且分段存入資料庫怎麼解決

注意引入的都是poi的包,使用Cell,excel2003的.xls對應是HSSFCell,而之後的xlsx對應的則是XSSFCell,但是他們都繼承於Cell,所以使用Cell就可以使用兩種格式的excel導入了,下面解決excel中數據的各種格式
[java] view plain
//讀取excel
try {
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gbk");
// 1. 創建工廠類
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2. 創建FileUpload對象
ServletFileUpload upload = new ServletFileUpload(factory);

// 3. 判斷是否是上傳表單
// boolean b = upload.isMultipartContent(request);
// 設置上傳文件最大值
upload.setSizeMax(25 * 1024 * 1024);
// 是文件上傳表單
// 4. 解析request,獲得FileItem項
List<FileItem> fileitems = upload.parseRequest(request);
// 5. 遍歷集合
for (FileItem item : fileitems) {
// 判斷是不是普通欄位
if (!item.isFormField()) {
// 獲得流,讀取數據寫入文件
InputStream in = item.getInputStream();
Workbook book = createWorkBook(in,item.getName());
// 獲得第一個工作表對象
Sheet sheet = book.getSheetAt(0);
if(0==sheet.getLastRowNum()){
//如果沒有數據
request.setAttribute("message", "excel的sheet0中不存在數據");
request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
}

// 第一行為標題,從第二行開始錄入
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
//標題行,用來對比方便得到數據
Row titleRow = sheet.getRow(0);
//數據行
Row row = sheet.getRow(i);
//獲得值
String value_temp= this.getValue((Cell) row.getCell(2));
}
}
}

} catch (Exception e) {
e.printStackTrace();
message="導入失敗<br/>"+message;
request.setAttribute("message",message);
request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);

}

② java excel poi 怎麼導入

1、下載poi相關jar,maven的集成如下:(把${poi.version}替換成你要的版本)

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
<scope>provided</scope>
</dependency>

2、根據poi相關api讀取sheet、row、cell,獲得excel的數據:

封裝row的對象,即每一行數據為一個對象,每個cell為對象里的一個屬性,

整個sheet的數據裝進集合里;

3、處理數據,可以對數據進行驗證或其他操作;

4、寫資料庫操作。

③ Java 怎麼把 excel文件導入到資料庫

package com.ddns.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2010-6-28
* Time: 10:56:48
* To change this template use File | Settings | File Templates.
*/
public class ExcelFile {
/**
* 新建一個Excel文件,裡面添加5行5列的內容,再添加兩個高度為2的大單元格。
*
* @param fileName
*/
public void writeExcel(String fileName) {

//目標文件
File file = new File(fileName);
FileOutputStream fOut = null;
try {
// 創建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();

// 在Excel工作簿中建一工作表,其名為預設值。
// 也可以指定工作表的名字。
HSSFSheet sheet = workbook.createSheet("Test_Table");

// 創建字體,紅色、粗體
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

// 創建單元格的格式,如居中、左對齊等
HSSFCellStyle cellStyle = workbook.createCellStyle();
// 水平方向上居中對齊
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 垂直方向上居中對齊
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 設置字體
cellStyle.setFont(font);

//下面將建立一個4行3列的表。第一行為表頭。
int rowNum = 0;//行標
int colNum = 0;//列標
//建立表頭信息
// 在索引0的位置創建行(最頂端的行)
HSSFRow row = sheet.createRow((short) rowNum);
// 單元格
HSSFCell cell = null;
for (colNum = 0; colNum < 5; colNum++) {
// 在當前行的colNum列上創建單元格
cell = row.createCell((short) colNum);

// 定義單元格為字元類型,也可以指定為日期類型、數字類型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 定義編碼方式,為了支持中文,這里使用了ENCODING_UTF_16
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// 為單元格設置格式
cell.setCellStyle(cellStyle);

// 添加內容至單元格
cell.setCellValue("表頭名-" + colNum);
}
rowNum++;
for (; rowNum < 5; rowNum++) {
//新建第rowNum行
row = sheet.createRow((short) rowNum);
for (colNum = 0; colNum < 5; colNum++) {
//在當前行的colNum位置創建單元格
cell = row.createCell((short) colNum);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("值-" + rowNum + "-" + colNum);
}
}

//合並單元格
//先創建2行5列的單元格,然後將這些單元格合並為2個大單元格
rowNum = 5;
for (; rowNum < 7; rowNum++) {
row = sheet.createRow((short) rowNum);
for (colNum = 0; colNum < 5; colNum++) {
//在當前行的colNum位置創建單元格
cell = row.createCell((short) colNum);
}
}
//建立第一個大單元格,高度為2,寬度為2
rowNum = 5;
colNum = 0;
Region region = new Region(rowNum, (short) colNum, (rowNum + 1),(short) (colNum + 1));
sheet.addMergedRegion(region);
//獲得第一個大單元格
cell = sheet.getRow(rowNum).getCell((short) colNum);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("第一個大單元格");

//建立第二個大單元格,高度為2,寬度為3
colNum = 2;
region = new Region(rowNum, (short) colNum, (rowNum + 1),(short) (colNum + 2));
sheet.addMergedRegion(region);
//獲得第二個大單元格
cell = sheet.getRow(rowNum).getCell((short) colNum);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("第二個大單元格");

//工作薄建立完成,下面將工作薄存入文件
//新建一輸出文件流
fOut = new FileOutputStream(file);
//把相應的Excel 工作簿存檔
workbook.write(fOut);
fOut.flush();
//操作結束,關閉文件
fOut.close();

System.out
.println("Excel文件生成成功!Excel文件名:" + file.getAbsolutePath());
} catch (Exception e) {
System.out.println("Excel文件" + file.getAbsolutePath() + "生成失敗:" + e);
} finally {
if (fOut != null){
try {
fOut.close();
} catch (IOException e1) {
}
}
}
}

/**
* 讀Excel文件內容
* @param fileName
*/
public void readExcel(String fileName) {
File file = new File(fileName);
FileInputStream in = null;
try {
//創建對Excel工作簿文件的引用
in = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(in);

//創建對工作表的引用。
//這里使用按名引用
HSSFSheet sheet = workbook.getSheet("Test_Table");
//也可用getSheetAt(int index)按索引引用,
//在Excel文檔中,第一張工作表的預設索引是0,其語句為:
//HSSFSheet sheet = workbook.getSheetAt(0);

//下面讀取Excel的前5行的數據
System.out.println("下面是Excel文件" + file.getAbsolutePath() + "的內容:");
HSSFRow row = null;
HSSFCell cell = null;
int rowNum = 0;//行標
int colNum = 0;//列標
for (; rowNum < 5; rowNum++) {
//獲取第rowNum行
row = sheet.getRow((short) rowNum);
for (colNum = 0; colNum < 5; colNum++) {
// 獲取當前行的colNum位置的單元格
cell = row.getCell((short) colNum);
System.out.print(cell.getStringCellValue() + "\t");
}
//換行
System.out.println();
}

in.close();
} catch (Exception e) {
System.out.println("讀取Excel文件" + file.getAbsolutePath() + "失敗:" + e);
} finally {
if (in != null){
try {
in.close();
} catch (IOException e1) {
}
}
}
}
public static void main(String[] args) throws Exception {
ExcelFile excel = new ExcelFile();
String fileName = "D:\\記錄明細.xls";
excel.writeExcel(fileName);
excel.readExcel(fileName);
}
}

④ 怎樣用java把excel數據導入資料庫

網上提供了很多的java讀取excel的包,如POI、jxl等,先讀取excel中的數據,然後封裝存入資料庫即可。

⑤ 如何用Java將excel數據導入資料庫

前端時間要導數據,,隨便找代碼弄了一個 能用的,貼給你看看。

public String uploadExcel(HttpServletRequest request) throws Exception {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
System.out.println("通過傳統方式form表單提交方式導入excel文件!");

InputStream in =null;
List<List<Object>> listob = null;
MultipartFile file = multipartRequest.getFile("upfile");
if(file.isEmpty()){
throw new Exception("文件不存在!");
}
in = file.getInputStream();
listob = new ImportExcelUtil().getBankListByExcel(in,file.getOriginalFilename());
in.close();

//該處可調用service相應方法進行數據保存到資料庫中,現只對數據輸出
for (int i = 0; i < listob.size(); i++) {
List<Object> lo = listob.get(i);

System.out.println(lo.get(0));
System.out.println(lo.get(1));

Word word = new Word();
word.setId(UUIDTools.getUUID());
word.setChinese(lo.get(1).toString());
word.setEnglish(lo.get(0).toString());
wordService.saveEnglishWord(word);
/* InfoVo vo = new InfoVo();
vo.setCode(String.valueOf(lo.get(0)));
vo.setName(String.valueOf(lo.get(1)));
vo.setDate(String.valueOf(lo.get(2)));
vo.setMoney(String.valueOf(lo.get(3)));

System.out.println("列印信息-->機構:"+vo.getCode()+" 名稱:"+vo.getName()+" 時間:"+vo.getDate()+" 資產:"+vo.getMoney()); */
}
return "result";
}

ImportExcelUtil類的getBankListByExcel方法:
public List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{
List<List<Object>> list = null;

//創建excel工作簿
Workbook work = this.getWorkbook(in,fileName);

Sheet sheet = null;
Row row = null;
Cell cell = null;

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

//遍歷Excel中所有的sheet
for (int i = 0; i < work.getNumberOfSheets(); i++) {
sheet = work.getSheetAt(i);
if(sheet==null){continue;}

//遍歷當前sheet中的所有行
for (int j = sheet.getFirstRowNum(); j < sheet.getLastRowNum(); j++) {
row = sheet.getRow(j);
if(row==null||row.getFirstCellNum()==j){continue;}

//遍歷所有的列
List<Object> li = new ArrayList<Object>();
for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
cell = row.getCell(y);
li.add(this.getCellValue(cell));
}
list.add(li);
}
}
// work.close();
return list;
}

前台弄個上傳標簽 訪問這個action就行了。