// 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. 【SpringBoot技术专题】「权限校验专区」Shiro整合JWT授权和认证实现

    本章介绍一下常用的认证框架Shiro结合springboot以及集合jwt快速带您开发完成一个认证框架机制. Maven配置依赖 <dependency> <groupId>o ...

  2. JDBC连接mariadb时使用依赖

    问题描述:最近在尝试使用mariadb,使用idea开发,在使用jdbc连接数据库的时候,一般会用到driver,user,pwd,url,使用mysql的例子太多了,也有很多详细的教程,但是现在尝试 ...

  3. 11.5.2 LVS-NAT 实验

    NAT拓扑 lvs-server VIP:10.211.55.99DIP:10.37.129.99 负载均衡器 开启路由功能(VIP桥接,DIP仅主机) rs01 RIP:10.37.129.3 后端 ...

  4. JVM学习笔记——类加载器与类加载过程

    类加载器与类加载过程 类加载器ClassLoader 类加载器 ClassLoader 用于把 class 文件装载进内存. 启动类加载器(Bootstrap ClassLoader): 这个类加载使 ...

  5. JavaScript 字符串(上)

    JavaScript 字符串(上) 三种引号 字符串可以包含在单引号.双引号或反引号中 //用法 let single = 'Single quotation mark'; //单引号 let dou ...

  6. The type name or alias SqlServer could not be resolved.Please check your configuration

    The type name or alias SqlServer could not be resolved.Please check your configuration file.... 检查一下 ...

  7. 题解 Wide Swap

    题目传送门 题目大意 给出一个长度为 \(n\) 的排列 \(a_{1,2,...,n}\) 以及常数 \(k\),每次可以交换两个数 \(a_i,a_j\) 当且仅当 \(j-i\ge k \tex ...

  8. SpringBoot整合JDBC-调用数据库

    SpringData 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理. Sprin ...

  9. .Net微信服务商平台ApiV3接口

    最近做个对接微信服务商平台的小程序项目,大概要实现的流程是:a)特约商户进件 > b)生成带参数的小程序码 > c)小程序支付 > d)分账,记录一下,希望能对需要的朋友有所帮助 开 ...

  10. Go语言核心36讲(Go语言进阶技术五)--学习笔记

    11 | 通道的高级玩法 我们已经讨论过了通道的基本操作以及背后的规则.今天,我再来讲讲通道的高级玩法. 首先来说说单向通道.我们在说"通道"的时候指的都是双向通道,即:既可以发也 ...