// 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. Winform配置文件读写操作

    前言 在项目当中为了增加软件的灵活性及可配置性,配置文件在程序当中起着不可替代的作用.下面介绍一下最近用的比较多的方式. config文件的操作 数据库连接字符串 1.获取连接字符串 public s ...

  2. MYSQL小版本升级(5.7.21至5.7.25)

    1.环境确认 [root@mysql ~]# ps -ef |grep -i mysql root 9173 1 0 2020 ? 00:00:00 /bin/sh /mysql/data/mysql ...

  3. 记一次 .NET 某电商定向爬虫 内存碎片化分析

    一:背景 1. 讲故事 上个月有位朋友wx找到我,说他的程序存在内存泄漏问题,寻求如何解决? 如下图所示: 从截图中可以看出,这位朋友对 windbg 的操作还是有些熟悉的,可能缺乏一定的实操经验,所 ...

  4. 从零入门 Serverless | 函数计算的开发与配置

    导读:在本篇文章中,"基本概念"部分主要对函数计算最核心的概念进行详细介绍,包括服务.函数.触发器.版本.别名以及相关的配置:"开发流程"部分介绍了基于函数计算 ...

  5. 手把手教你写hexo博客

    市面上现在有各种博客框架,本博客教大家的是Hexo博客框架,目前比较火.搭建博客中遇到各种各样问题,网上方案也比较成熟. 一.搭建环境 安装 git 安装 node.js 安装 Hexo npm in ...

  6. GPIO位带操作点亮LED,且使用按键控制开关

    1. 项目 类似与C51单片机的位操作使能引脚来点亮LED. 例如,sbit P0^0 = 0 LED1 = P0^0; 2. 代码 main.c #include "stm32f10x.h ...

  7. 使用固件库点亮led灯

    1. 项目 使用STM32F103VE的固件库实现流水灯设计. 2. 代码 由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的. 点亮绿灯: main.c #include " ...

  8. Java:Set接口小记

    Java:Set接口小记 对 Java 中的 Set接口 与 其实现类,做一个微不足道的小小小小记 概述 public interface Set<E> extends Collectio ...

  9. [no code][scrum meeting] Beta 5

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月18日14:30,主持者:叶开辉 下次例会时间:5月19日11:30,主持者:黎正宇 一.工作 ...

  10. elasticsearch的索引重建

    我们知道es在字段的mapping建立后就不可再次修改mapping的值.在我们实际的情况下有些时候就是需要修改mapping的值,解决方案就是重新构建索引数据. 方式一 : 使用索引别名,创建另外一 ...