// 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. P4544 [USACO10NOV]Buying Feed G

    part 1 暴力 不难发现有一个 $\mathcal O(K^2n)$ 的基础 dp: $$f_{i,j+l}=\min(f_{i,j+l},f_{i-1,j}+(x_i-x_{i-1})\time ...

  2. 三种方法求解最大子区间和:DP、前缀和、分治

    题目 洛谷:P1115 最大子段和 LeetCode:最大子序和 给出一个长度为 \(n\) 的序列 \(a\),选出其中连续且非空的一段使得这段和最大. 挺经典的一道题目,下面分别介绍 \(O(n) ...

  3. 题解 CF762D Maximum path

    题目传送门 Description 给出一个 \(3\times n\) 的带权矩阵,选出一个 \((1,1)\to (3,n)\) 的路径使得路径上点权之和最大. \(n\le 10^5\) Sol ...

  4. 阿里P8面试官:如何设计一个扛住千万级并发的架构?

    大家先思考一个问题,这也是在面试过程中经常遇到的问题. 如果你们公司现在的产品能够支持10W用户访问,你们老板突然和你说,融到钱了,会大量投放广告,预计在1个月后用户量会达到1000W,如果这个任务交 ...

  5. PTA实验11-1-7 藏头诗 (15分)

    实验11-1-7 藏头诗 (15分) 本题要求编写一个解密藏头诗的程序. 输入格式: 输入为一首中文藏头诗,一共四句,每句一行.注意:一个汉字占两个字节. 输出格式: 取出每句的第一个汉字并连接在一起 ...

  6. 【UE4 C++】UKismetMathLibrary 源代码

    // Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" # ...

  7. ORB_SLAM3 -- 配置安装

    安装环境 Ubuntu20.04 ORB_SLAM3依赖项安装 opencv3 ORB_SLAM3可用opencv3或opencv4编译,作者这里安装测试了opencv3 Step1: 安装openc ...

  8. 【二食堂】Beta - 发布声明

    Beta - 发布声明 新功能 在Beta阶段,图谱方面的新功能有:自定义关系的添加与删除.实体查找.实体名称的修改.实体之间关系的修改.新增了项目创建与删除功能,此外还增加了好友系统,可以实现好友的 ...

  9. 单片机STM32的启动文件详解--学习笔记

    启动文件简介 启动文件由汇编编写,是系统上电复位后第一个执行的程序.主要做了以下工作: 1.初始化堆栈指针SP=_initial_sp 2.初始化PC 指针=Reset_Handler 3.初始化中断 ...

  10. python re:正向肯定预查(?=)和反向肯定预查(?<=)

    参考资料:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html (?=pattern) 正向肯定预查,在任何匹配pattern的字符串 ...