Java导入Excel文件到数据库

实例代码:

    @PostMapping("/import")
    public ResponseMsg<Boolean> importConfig(@RequestBody MultipartFile file ) {
        try {
            ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
            reader.addHeaderAlias("标题行名称","对应的字段");
            //例如
            reader.addHeaderAlias("用户名","username");
            List<User> list = reader.readAll(User.class);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

引入hutool依赖 hutool依赖版本会影响部分方法的使用,在最新的版本中更新了很多4.x版本不同的方法

<!-- hutool 工具包 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.1</version>
</dependency>

<!-- poi exce表格导入导出 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>

<!-- poi需要使用 excel表格解析器 -->
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>

流式读取

@PostMapping("/excel")
public String importBatchExcel(@RequestBody MultipartFile file) throws Exception {
List<Map<String,String>> lists = new LinkedList<>();
List<Object> lists2 = new LinkedList<>();
Workbook workbook=null;

boolean is2003Excel= file.getOriginalFilename().toLowerCase().endsWith("xls")?true:false;
if (is2003Excel){
workbook= new HSSFWorkbook(file.getInputStream());
}else {
workbook = new XSSFWorkbook(file.getInputStream());
}
// sheet页数
int numberOfSheets = workbook.getNumberOfSheets();

for (int i=0;i<numberOfSheets;i++){
//读取每一个sheet
Sheet sheetAt = workbook.getSheetAt(i);
for (Row row: sheetAt){
//每一行 第几列
System.out.println(row.getCell(0));
}
}

提出来一个静态方法

public static  void getExcel(MultipartFile file) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook(file.getInputStream());

HSSFSheet sheet = null;
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表
sheet = workbook.getSheetAt(i);
System.out.println(sheet.getSheetName());
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {//获取每行
HSSFRow row = sheet.getRow(j);

for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) {//获取每个单元格
System.out.print(row.getCell(k) + "\t");
}
System.out.println("---Sheet" + i + "处理完毕---");
}
}
}

实际中的代码

        ResponseMsg<Boolean> msg = new ResponseMsg(ResponseCode.SUCCESS);
List<Invoice> list = new ArrayList<>();
List<InvoiceDetail> detailList = new ArrayList<>();
try {
OPCPackage opcPackage = OPCPackage.open(file.getInputStream());
XSSFReader reader = new XSSFReader(opcPackage);
// sheet页数
SharedStringsTable sharedStringsTable = reader.getSharedStringsTable();
StylesTable stylesTable = reader.getStylesTable();
// SAXParserFactory parserFactory = SAXParserFactory.newInstance();
// SAXParser parser = parserFactory.newSAXParser();
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
XSSFReader.SheetIterator sheetIterator = (XSSFReader.SheetIterator) reader.getSheetsData();
SheetHandler sheetHandler = new SheetHandler(list);
SheetHandlerDetail sheetHandlerDetail = new SheetHandlerDetail(detailList);
XSSFSheetXMLHandler sheetXMLHandler = new XSSFSheetXMLHandler(stylesTable, sharedStringsTable, sheetHandler, false);
xmlReader.setContentHandler(sheetXMLHandler);
while (sheetIterator.hasNext()) {
InputStream next = sheetIterator.next();
InputSource is = new InputSource(next);
System.out.println("====sheetName1===");
System.out.println(sheetIterator.getSheetName());
System.out.println("====sheetName2===");
log.info("读取"+sheetIterator.getSheetName());
xmlReader.parse(is);
}

新建一个SheetHandler类实现XSSFSheetXMLHandler.SheetContentsHandler接口

public class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler {
/**
* 开始行
* @param i
*/
@Override
public void startRow(int i) {

}

/**
* 结束行
* @param i
*/
@Override
public void endRow(int i) {

}

/**
* 处理每个单元格
* @param cellName
* @param value
* @param xssfComment
*/
@SneakyThrows
@Override
public void cell(String cellName, String value, XSSFComment xssfComment) {

}
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇