// Excel 读取写入数据库 // 3.8版本的poi  4.0 可以不用写  parseCell  这个方法,可以直接赋值 STRING 类型

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil;
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.ss.usermodel.WorkbookFactory; import com.e6soft.base.service.JService;
import com.e6soft.base.annotations.JCall;
import com.e6soft.base.util.WebUtil; @JActionService(uri="ledger")
public class Ledger extends JService { private String parseCell(Cell cell){
String cellStr = "";
switch(cell.getCellType()){ case HSSFCell.CELL_TYPE_NUMERIC : // 数学
if(HSSFDateUtil.isCellDateFormatted(cell)){ // 日期,时间
SimpleDateFormat sdf = null;
if(cell.getCellStyle().getDataFormat() ==
HSSFDataFormat.getBuiltinFormat("h:mm")){ // 时间 HH:mm
sdf = new SimpleDateFormat("HH:mm");
} else {
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
cellStr = sdf.format(cell.getDateCellValue());
}else if(cell.getCellStyle().getDataFormat() == 58){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
double temp = cell.getNumericCellValue();
Date date = DateUtil.getJavaDate(temp);
cellStr = sdf.format(date);
}else{
double temp = cell.getNumericCellValue();
String style = cell.getCellStyle().getDataFormatString();
DecimalFormat format = new DecimalFormat();
if(style.equals("General")){
format.applyPattern("#");
}
cellStr = format.format(temp);
}
break;
case HSSFCell.CELL_TYPE_STRING : // 字符串
cellStr = cell.getRichStringCellValue().toString();
break;
case HSSFCell.CELL_TYPE_BLANK : // 布尔
cellStr = "";
break;
default :
cellStr = "";
} return cellStr;
} @JCall
public void ImportTable() throws Exception{ // 读取上传文件的xls 存入数据库
/*实现过程:用户先上传文件至服务器的临时位置,然后写一个读取excel的方法,程序从服务器的临时位置读取excel文件;
* 然后循环工作表和行,将单元格的内容存入集合;再上传至临时表(每次先清空),再根据sku(主键)更新正式数据库即可完成导入文件更新字段信息。*/ String Id=WebUtil.getParam("id");
String fileSaverId=WebUtil.getParam("fileSaverId");
String fwqdz=WebUtil.getParam("dz");
String dqid = WebUtil.getParam("dqid"); // 文件id
String gs=WebUtil.getParam("gs"); String sql = " SELECT I.FILE_INFO_ID,I.FILE_INDEX,I.FILE_FILENAME,I.FILE_URL,I.FILE_SAVER "
+" FROM FSXC3.T_P_FILE_INFO I "
+" WHERE I.FILE_SAVER = '"+fileSaverId+"' AND I.FILE_INDEX = '"+Id+"' and I.FILE_INFO_ID = '"+dqid+"'";// not_save_402881f66abf8173016abfae26d00011"
List<Map<String, Object>> sj = dBSelect(sql);
String wj = "";
String savePath=System.getProperty("catalina.home")+"/webapps/webdav/";
for(Map<String, Object> dz:sj){
wj = dz.get("file_info_id").toString();
}
String widz = savePath+wj+".xls"; // 文件在服务器的地址
// 获得文件所在地
File file = new File(widz); List<Map<String, Object>> qbsj = new ArrayList<Map<String,Object>>();
// 读取文件
try {
//同时支持Excel 2003、2007
//File excelFile = new File("F:\\MyEclipse 2017 CI\\SY\\src\\word\\aa.xls"); //创建文件对象
FileInputStream is = new FileInputStream(file); //文件流
Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
int sheetCount = workbook.getNumberOfSheets(); //Sheet的数量
//遍历每个Sheet
//for (int s = 0; s < sheetCount; s++) {
Sheet sheet = workbook.getSheetAt(0);
int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数
//遍历每一行 // 前3行不读
for (int r = 2; r < rowCount; r++) {
Row row = sheet.getRow(r);
int cellCount = row.getPhysicalNumberOfCells(); //获取总列数
/*
//遍历每一个单元格
for (int c = 0; c < cellCount; c++) {
Cell cell = row.getCell(c); // 序号
CellType cellType = cell.getCellType(); // STRING
String cellValue = null; //在读取单元格内容前,设置所有单元格中内容都是字符串类型
// cell.setCellType(CellType.STRING); // //设置单元格类型
cell.setCellType(CellType.STRING); // //设置单元格类型 //按照字符串类型读取单元格内数据
cellValue = cell.getStringCellValue(); //在这里可以对每个单元格中的值进行二次操作转化 System.out.print(cellValue + " ");
} */ // 定义每一行的变量 //String ID = parseCell(row.getCell(0));
String XMMC = parseCell(row.getCell(0));
String ZTZ = parseCell(row.getCell(1));
String ZJLY = parseCell(row.getCell(2));
String GCJSTZ = parseCell(row.getCell(3));
String JSGM = parseCell(row.getCell(4));
String JHGQ = parseCell(row.getCell(5));
String C = parseCell(row.getCell(6));
String CC = parseCell(row.getCell(7)); String CCC = parseCell(row.getCell(8));
String CCCC = parseCell(row.getCell(9));
String XJ = parseCell(row.getCell(10));
String QQFY = parseCell(row.getCell(11));
String GCFY = parseCell(row.getCell(12));
String ZDCQFY = parseCell(row.getCell(13));
String TZXJ = parseCell(row.getCell(14));
String JDJH = parseCell(row.getCell(15));
String ZJJH = parseCell(row.getCell(16)); String LX = parseCell(row.getCell(17));
String WJJY = parseCell(row.getCell(18));
String ZCSS = parseCell(row.getCell(19));
String XMXZ = parseCell(row.getCell(20));
String CZWT = parseCell(row.getCell(21));
String YDJHCZ = parseCell(row.getCell(22));
String NF = parseCell(row.getCell(23)); //按照字符串类型读取单元格内数据
//String a = A.getStringCellValue(); Map<String,Object> dataMap = new HashMap<String,Object>();
// 顺序一致!!
//dataMap.put("ID", ID);//ID ID
dataMap.put("XMMC", XMMC); // XMMC
dataMap.put("ZTZ", ZTZ); // ZTZ
dataMap.put("ZJLY", ZJLY); // ZJLY
dataMap.put("GCJSTZ", GCJSTZ); // GCJSTZ
dataMap.put("JSGM", JSGM); // JSGM
dataMap.put("JHGQ", JHGQ); // JHGQ
dataMap.put("C", C); // C
dataMap.put("CC", CC);// CC
dataMap.put("CCC", CCC); // CCC
dataMap.put("CCCC", CCCC); // CCCC
dataMap.put("XJ", XJ); // XJ
dataMap.put("QQFY", QQFY); // QQFY
dataMap.put("GCFY", GCFY); // GCFY
dataMap.put("ZDCQFY", ZDCQFY); // ZDCQFY
dataMap.put("TZXJ", TZXJ); // TZXJ
dataMap.put("JDJH", JDJH); // JDJH
dataMap.put("ZJJH", ZJJH); // ZJJH
dataMap.put("LX", LX); //LX
dataMap.put("WJJY", WJJY); //WJJY
dataMap.put("ZCSS", ZCSS); //ZCSS
dataMap.put("XMXZ", XMXZ); //XMXZ
dataMap.put("CZWT", CZWT); //CZWT
dataMap.put("YDJHCZ", YDJHCZ); //YDJHCZ
dataMap.put("NF", NF); //NF 年份,用于区分年度填报
//dataMap.put("DLRID", I); //DLRID 登录人id dataMap.put("GS", gs); // gs // System.out.println(dataMap);
// 加入
//qbsj.add(dataMap); // 写入数据库 this.insert(dataMap,"t_fsxc_tzjsjh",null);
}
// } }
catch (Exception e) {
e.printStackTrace();
} } }

Excel 读取写入数据库的更多相关文章

  1. nio实现文件读取写入数据库或文件

    1.nio实现读取大文件,之后分批读取写入数据库 2.nio实现读取大文件,之后分批写入指定文件 package com.ally; import java.io.File; import java. ...

  2. python将excel数据写入数据库,或从库中读取出来

    首先介绍一下SQL数据库的一些基本操作: 1创建 2删除 3写入 4更新(修改) 5条件选择 有了以上基本操作,就可以建立并存储一个简单的数据库了. 放出python调用的代码: 此处是调用dos 操 ...

  3. Excel导入+写入数据库

    1.引用服务 2.前端 <h2>这里是上传Excel功能页面</h2> <div> <form action="/Improve_Excel/get ...

  4. PHP读取Excel数据写入数据库(包含图片和文字)

    public function test(){ $exts = 'xlsx'; //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org ...

  5. 利用ADO让普通人用excel读取oracle数据库表的通用办法

    Ref:http://blog.csdn.net/iamlaosong/article/details/8465177 Excel通过ADO方式连接到Oracle并操作Oracle给那些编程能力不强的 ...

  6. Java POI 操作Excel(读取/写入)

    pom.xml依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi< ...

  7. Excel读取导入数据库碰到的问题

    1.未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 下载并安装驱动:http://download.microsoft.com/download/7/0/3/703 ...

  8. C# Excel 读取导入数据库

    使用Aspose.Cells组件. 表格第一行为表头合并,第二行为数据名称,从第三行开始数据. if (xtraOpenFileDialog1.ShowDialog() == DialogResult ...

  9. SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable

    MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...

随机推荐

  1. Android 开发进程 0.35 升级编译版本Android12

    Android12升级 工作需要升级到编译版本31 在这里记录一下遇到的问题. 错误:Manifest merger failedManifest merger failed 这个问题通常搜到的答案是 ...

  2. Cookie实现是否第一次登陆/显示上次登陆时间

    Cookie实现是否第一次登陆/显示上次登陆时间 最近刚好看到Cookie这方面知识,对Servlet部分知识已经生疏,重新翻出已经遗弃角落的<JavaWeb开发实战经典>,重新温习了Co ...

  3. 开发函数计算的正确姿势——OCR 服务

    作者 | 杜万(倚贤) 阿里云技术专家 简介 首先介绍下在本文出现的几个比较重要的概念: OCR(光学字符识别):光学字符识别(Optical Character Recognition, OCR)是 ...

  4. 题解 Beautiful Pair

    题目传送门 题目大意 给出一个 \(n\) 个点的序列 \(a_{1,2,...,n}\) ,问有多少对点对 \((i,j)\) 满足 \(a_i\times a_j\le a_k(i\le k\le ...

  5. 洛谷3973 TJOI2015线性代数(最小割+思维)

    感觉要做出来这个题,需要一定的线代芝士 首先,我们来观察这个柿子. 我们将\(B\)的权值看作是收益的话,\(C\)的权值就是花费. 根据矩阵乘法的原理,只有当\(a[i]和a[j]\)都为\(1\) ...

  6. MyBatis 中实现SQL语句中in的操作 (11)

    MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...

  7. 基于Apache Zookeeper手写实现动态配置中心(纯代码实践)

    相信大家都知道,每个项目中会有一些配置信息放在一个独立的properties文件中,比如application.properties.这个文件中会放一些常量的配置,比如数据库连接信息.线程池大小.限流 ...

  8. 五分钟搞懂spring-cloud-square

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 初识spring-cloud-square 2021年 ...

  9. 零基础入门C语言超详细的字符串详解

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

  10. 牛客网 剑指Offer 索引

    二维数组中的查找 替换空格 从尾到头打印链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整数次方 调整数组顺序使奇数位于偶数 ...