新聞中心
在處理數(shù)據(jù)時(shí),我們經(jīng)常會(huì)將數(shù)據(jù)存儲(chǔ)在Excel文件中,并使用Java代碼將其導(dǎo)入數(shù)據(jù)庫。但是,在導(dǎo)入Excel文件時(shí),往往會(huì)遇到公式無法正確導(dǎo)入到數(shù)據(jù)庫中的問題。這篇文章將介紹如何解決這個(gè)問題。

創(chuàng)新互聯(lián)建站是專業(yè)的啟東網(wǎng)站建設(shè)公司,啟東接單;提供成都網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行啟東網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
一、問題描述
當(dāng)我們將包含公式的Excel文件導(dǎo)入到數(shù)據(jù)庫中時(shí),公式的值并沒有被正確導(dǎo)入,而是以公式本身的形式存儲(chǔ)在數(shù)據(jù)庫中。這是因?yàn)镋xcel中的公式是一種計(jì)算規(guī)則,而不是存儲(chǔ)在單元格中的值。因此,在導(dǎo)入時(shí),我們需要將公式轉(zhuǎn)化為相應(yīng)的值,并將其存儲(chǔ)在數(shù)據(jù)庫中。
二、解決方案
為了解決這個(gè)問題,我們需要使用Java中的一些庫來幫助我們將Excel中的公式轉(zhuǎn)化為相應(yīng)的值,并將其導(dǎo)入到數(shù)據(jù)庫中。以下是一個(gè)詳細(xì)的步驟。
1. 讀取Excel文件
我們需要使用Java中的Apache POI庫來讀取Excel文件。Apache POI是一款開源的Java庫,可用于操作Microsoft Office文件。
使用以下代碼讀取Excel文件:
FileInputStream fileInputStream = new FileInputStream(new File(“文件路徑”));
Workbook workbook = new XSSFWorkbook(fileInputStream);
Sheet sheet = workbook.getSheetAt(0);
2. 獲取單元格值
使用以下代碼獲取單元格的值:
Cell cell = sheet.getRow(rowNum).getCell(colNum);
Object cellValue = null;
if(cell.getCellType() == CellType.NUMERIC){
cellValue = cell.getNumericCellValue();
}else if(cell.getCellType() == CellType.STRING){
cellValue = cell.getStringCellValue();
}else if(cell.getCellType() == CellType.FORMULA){
cellValue = cell.getCellFormula();
}
當(dāng)單元格類型為公式時(shí),以上代碼將返回公式本身而不是計(jì)算后的值。
3. 計(jì)算公式
以下代碼將公式轉(zhuǎn)化為相應(yīng)的值:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellReference cellReference = new CellReference(rowNum, colNum);
Cell cell = sheet.getRow(cellReference.getRow()).getCell(cellReference.getCol());
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
return cellValue.getBooleanValue();
case Cell.CELL_TYPE_NUMERIC:
return cellValue.getNumberValue();
case Cell.CELL_TYPE_STRING:
return cellValue.getStringValue();
default:
return null;
}
4. 導(dǎo)入數(shù)據(jù)庫
我們將通過JDBC連接數(shù)據(jù)庫,并使用以下代碼將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中:
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
PreparedStatement pstmt = conn.prepareStatement(“INSERT INTO table_name (col1, col2, …) VALUES (?, ?, …)”);
pstmt.setObject(colIndex, cellValue);
…
pstmt.executeUpdate();
這樣就完成了將包含公式的Excel文件導(dǎo)入數(shù)據(jù)庫的步驟。
三、
在處理數(shù)據(jù)時(shí),使用Excel文件是很常見的。然而,在將Excel文件中包含公式的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫時(shí),需要將公式轉(zhuǎn)化為相應(yīng)的值,并將其存儲(chǔ)在數(shù)據(jù)庫中。我們可以使用Java中的Apache POI庫來讀取Excel文件,并使用FormulaEvaluator計(jì)算公式。然后,通過JDBC連接數(shù)據(jù)庫,并將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中。這樣就能夠輕松地。
相關(guān)問題拓展閱讀:
- 怎樣將Excel文件導(dǎo)入數(shù)據(jù)庫(在P環(huán)境下Java代碼)
怎樣將Excel文件導(dǎo)入數(shù)據(jù)庫(在P環(huán)境下Java代碼)
利用隱此poi組件讀灶畝迅出excel文件內(nèi)部及各單元格 再插入到表的相應(yīng)字段中。我一直是這么做的耐知?;蛘呃胘xl組件。
呵呵,樓主既然思路都有了還怕寫不出代碼么?
你這個(gè)思路沒有問題的!
可以把這個(gè)問題拆分成幾個(gè)小問題,就簡單多了。
之一是文件上傳,可以參照J(rèn)akarta的FileUpload組件,其實(shí)也不一定要用這個(gè),用普通的Post也就行了。
第二是Excel解析,用L或者POI都攔搏茄行
第三銀或是數(shù)據(jù)保存,這個(gè)應(yīng)該簡單吧,一個(gè)循環(huán),一行對(duì)應(yīng)一條數(shù)據(jù),寫好了方法循環(huán)賦值調(diào)用就行簡察了。
第四是查詢和顯示,這個(gè)更簡單了,不用多說。
文件上傳和Excel解析的例子網(wǎng)上很多的,改改就變自己的了,何必在這管別人要代碼呢~
我只給你說下第二步怎么樣吧,其他的你自己應(yīng)該可以解決的。
通過使用第三方包jxl.jar,我以前導(dǎo)過數(shù)據(jù),也是解析Excel,將Excel中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中,這個(gè)包很好下,如果找不到可以留下郵箱
//程序說明: 要導(dǎo)入jxl.jar到Classpath中。
import jxl.*;
import java.io.*;
import jxl.write.*;
/**
* java讀取Excel表格,拷貼心、更新Excel工作薄
*/
public class Test1 {
public static void main(String args) {
jxl.Workbook rwb = null;
try{
//構(gòu)建Workbook對(duì)象 只鄭緩讀Workbook對(duì)象
//直接從本地文件創(chuàng)建Workbook
//從輸入流創(chuàng)建Workbook
InputStream is = new FileInputStream(”
rwb = Workbook.getWorkbook(is);
//Sheet(術(shù)語:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
//Sheet的下標(biāo)喊薯模是從0開始的
//獲取之一張Sheet表
Sheet rs = rwb.getSheet(0);
//獲取Sheet表中所包含的總列數(shù)
int rsColumns = rs.getColumns();
//獲取Sheet表中所包含的總行數(shù)
int rsRows = rs.getRows();
//獲取指這下單元格的對(duì)象引用
for(int i=0;i
for(int j=0;j
Cell cell = rs.getCell(j,i);
System.out.print(cell.getContents()+” “);
}
System.out.println();
}
//利用已經(jīng)創(chuàng)建的Excel工作薄創(chuàng)建新的可寫入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(”
//讀取之一張工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);
//獲取之一個(gè)單元格對(duì)象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
//決斷單元格的類型,做出相應(yīng)的轉(zhuǎn)化
if (wc.getType() == CellType.LABEL) {
Label l = (Label) wc;
l.setString(“The value has been modified.”);
}
//寫入Excel對(duì)象
wwb.write();
wwb.close();
}catch(Exception e){
e.printStackTrace();
}
finally{
//操作完成手晌時(shí),關(guān)閉對(duì)象,翻譯占用的內(nèi)存空間
rwb.close();
}
}
}
關(guān)于java xls導(dǎo)入數(shù)據(jù)庫 公式問題的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
標(biāo)題名稱:解決JavaXLS導(dǎo)入數(shù)據(jù)庫公式問題(javaxls導(dǎo)入數(shù)據(jù)庫公式問題)
文章源于:http://www.dlmjj.cn/article/dppgipc.html


咨詢
建站咨詢
