发布于2021-11-25 20:51 阅读(791) 评论(0) 点赞(12) 收藏(3)
java 导入excel文件保存到数据库(一)(jxl方式,直接复制)
jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作微软的Excel文档。除了Jxl之外,还有Apache的一个POI项目,也可以操作Excel,两者相比之下:Jxl使用方便,但功能相对POI比较弱,很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel。
<!-- 添加poi 依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
@RequestMapping(value="/upload")
@ResponseBody
public String upload_excel(@RequestParam("file") MultipartFile file, HttpServletResponse response,HttpServletRequest request)throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
//所有excel数据,调用工具类
List<List<Object>> payrollData = GetExcelData.getExcelData( toFile,file.getInputStream());
System.out.println("haha:"+payrollData.toString());
//这种方法会在本地产生临时文件,用完后需要删除
if (toFile.exists()) {
toFile.delete();
//第一行表头数据
List<Object> bt=payrollData.get(0);
ListIterator li = bt.listIterator();
while(li.hasNext()){
Object obj = li.next();
//String newBt=btChange(obj.toString());
li.set(onj);
}
System.out.println(bt.toString());
List<Map> data=new ArrayList<>();
for (int i = 1; i < payrollData.size(); i++) {
Map<String,String> map=new HashMap<>();
//存放临时数据
List<Object> temp=payrollData.get(i);
for (int j = 0; j <temp.size() ; j++) {
String key=bt.get(j).toString();
map.put(key,temp.get(j).toString());
}
data.add(i-1, map);
}
System.out.println(data.toString());
//保存数据库操作
payrollService.saveDr(data);
}
return "success";
}
public class GetExcelData {
private static final String EXCEL_XLS = "xls";
private static final String EXCEL_XLSX = "xlsx";
public static List<List<Object>> getExcelData(File file,InputStream is) throws IOException {
Workbook wb;
wb = getWorkbok(is, file);
// 获取工作表的数量
int numberOfSheets = wb.getNumberOfSheets();
// 获取第一个工作表
Sheet sheet = wb.getSheetAt(0);
//实例化一个二维list集合
List<List<Object>> listData = new ArrayList<List<Object>>();
Row row = null;// 行对象
Iterator<Cell> cols = null;// 列对象
List<Object> list = null;// 用来存放数据
int rows = sheet.getPhysicalNumberOfRows();
for (int i = 0; i < rows; i++) {// 循环每一行的数据
String value="";
row = sheet.getRow(i);
if (row != null) {
cols = row.cellIterator();
list = new ArrayList<Object>();
while (cols.hasNext()) {
Cell cell=cols.next();
value=getCellValue(cell);
list.add(value);//添加每一行的数据到list中
}
listData.add(list);//将每一行的list放到另一个list中
}
}
return listData;
}
private static Workbook getWorkbok(InputStream in, File file) throws IOException {
Workbook wb = null;
if (file.getName().endsWith(EXCEL_XLS)) {
wb = new HSSFWorkbook(in);
} else if (file.getName().endsWith(EXCEL_XLSX)) {
wb = new XSSFWorkbook(in);
}
return wb;
}
//表格中有公式调用该方法,直接得到表达式的值,而不是表达式
public static String getCellValue(Cell cell) {
int cellType = cell.getCellType();
String cellValue = "";
switch (cellType) {
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
try {
cellValue = cell.getStringCellValue();
} catch (IllegalStateException e) {
cellValue = String.valueOf(cell.getNumericCellValue());
}
break;
default:
cellValue = cell.getStringCellValue();
}
return cellValue.trim();
}
}
只需要这两个js文件
<script type="text/javascript" src="../../../assets/js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="../../../assets/js/ajaxfileupload.js"></script>
添加标签
<input type="file" id="file" name="file" @change="uploadFile123(this)" title="导入excel"/>
调用方法
function uploadFile123(file){
// var index = layer.msg('正在上传,请稍候',{icon: 16,time:false,shade:0.8});
$.ajaxFileUpload({
url : httpurl+'/payroll/upload' ,
secureuri : false, //一般设置为false
fileElementId : 'file', //文件上传空间的id属性 <input type="file" id="file" name="file" />
type : 'post',
dataType : 'text', //返回值类型 一般设置为
success : function(result) //服务器成功响应处理函数
{
alert(result)
},
error : function(result)//服务器响应失败处理函数
{
}
}
);
return false;
}
[{sds=103.49, lsxbt=0, zfbt=1757, kylbx=507.355, zwgz=1250, gwjt=655, bksds=0, dwfdzynj=285.4, syshbt=585, dky=0, cgbt=0, bfgz=0, zfgjj=1761, kyanglbx=856.2, BASESALARY=563, REALWAGES=3550.925, kghf=77.595, dwfdsybxj=19.4, jtbt=250, NAME=arices, kfhj=3772.535, WAGESPAYABLE=5060, ybhj=7323.46, qtkk=0, dwfdghf=77.595, dwfdylbx=429.765, dwfdyanglbx=570.8, dwfdgjj=880.5, kzynj=428.1, ksybx=38.795, dke=0}, {sds=2, lsxbt=2, zfbt=2, kylbx=2, zwgz=2, gwjt=2, bksds=1, dwfdzynj=2, syshbt=2, dky=2, cgbt=2, bfgz=2, zfgjj=2, kyanglbx=2, BASESALARY=2, REALWAGES=2, kghf=2, dwfdsybxj=2, jtbt=2, NAME=21213, kfhj=2, WAGESPAYABLE=2, ybhj=2, qtkk=1, dwfdghf=2, dwfdylbx=2, dwfdyanglbx=2, dwfdgjj=2, kzynj=2, ksybx=1, dke=2}]
1. 前端代码可以用任何方式上传文件,但是格式必须是MultipartFile类型
2. 如果不需要前端的话,直接在工具类中创建File文件,获得它的输入流,放入workbook中
3. 表格中有表达式,工具类下方有解决方案,有兴趣可以研究下,本文已调用。
本文知识大部分来源于一位博主的文章
传送去大神博主
如果有用,请点个赞!!!!!
原文链接:https://blog.csdn.net/yyclassmvp/article/details/121493250
作者:狗蛋来了
链接:http://www.javaheidong.com/blog/article/331408/5cf4cd362f9c56761928/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!