// 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. 利用Java Agent进行代码植入

    利用Java Agent进行代码植入 Java Agent 又叫做 Java 探针,是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术.可以把javaagent理解成一种代码注入的方式 ...

  2. IDEA破解方法:重新刷新到30天【支持正版】

    IDEA破解方法:重新刷新到30天[支持正版] 步骤: 导入plugins.zhile.io 进入File-->Settings-->Plugins 点设置(齿轮符号)-->Mana ...

  3. Editing Tools(编辑工具)

    编辑工具 # Process: 修剪线 arcpy.TrimLine_edit("", "", "DELETE_SHORT") # Proc ...

  4. 每日总结:Java基本语法 (2021.9.23)

         对象:对象是类的一个实例,有状态和行为. 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法. 实例变量:每个对象都有独特的实例变量,对象的状态由这些实 ...

  5. postman如何解决下个接口依赖上一个接口数据

    解决思路:将上一个接口返回的数据保存起来,然后提供下个接口使用,postman中通过设置全局变量来保存数据 步骤1:在Tests中添加如下图js代码. var jsondata = JSON.pars ...

  6. C 可变参数列表 stdarg.h

    内容来自<c和指针>,整理后方便个人理解 stdarg.h 菜鸟教程 - <stdarg.h> 类型 va_list 宏 va_start va_arg va_end #inc ...

  7. (翻译)领域驱动设计实现-Implementing Domain Driven Design

    简介 Implementing Domain Driven Design 领域驱动设计实现 A practical guide for implementing the Domain Driven D ...

  8. Android系统编程入门系列之应用权限的定义与申请

    在之前关于应用内数据本地保存为文件时,曾提到应用需要申请外部存储设备的读写权限才能访问外部存储中的文件.那么针对某一种权限,应用程序具体应该怎么申请使用呢?本文将详细介绍. 应用中的权限主要分为两类, ...

  9. Sobol 序列并行化的实践经验

    目录 Sobol 序列并行化的实践经验 随机数发生器并行化的常见策略 Sobol 序列的原理和跳转功能 Sobol 序列并行化实践 分块策略 蛙跳策略 蛙跳策略的计算量分析 减少异或计算的技巧 分块策 ...

  10. ESD

    Reverse standoff voltage是保护二极管的反向工作电压, 在这个电压, 二极管是不工作的. Breakdown voltage 是二极管的击穿电压, 超过这个电压后, 二极管迅速反 ...