java 读excel 还是比较方便简单的,原理就是,先用java 读取excel,然后,一行行的写入数据库,字段的话,你自己程序里面写就行了,给你个例子:
从Excel读取数据,生成新的Excel,以及修改Excel
package commonutil;
import jxl;
import jxlformatUnderlineStyle;
import jxlwrite;
import jxlwriteNumber;
import jxlwriteBoolean;
import javaio;
/
Created by IntelliJ IDEA
User: xl
Date: 2005-7-17
Time: 9:33:22
To change this template use File | Settings | File Templates
/
public class ExcelHandle
{
public ExcelHandle()
{
}
/
读取Excel
@param filePath
/
public static void readExcel(String filePath)
{
try
{
InputStream is = new FileInputStream(filePath);
Workbook rwb = WorkbookgetWorkbook(is);
//Sheet st = rwbgetSheet("0")这里有两种方法获取sheet表,1为名字,而为下标,从0开始
Sheet st = rwbgetSheet("original");
Cell c00 = stgetCell(0,0);
//通用的获取cell值的方式,返回字符串
String strc00 = c00getContents();
//获得cell具体类型值的方式
if(c00getType() == CellTypeLABEL)
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00getString();
}
//输出
Systemoutprintln(strc00);
//关闭
rwbclose();
}
catch(Exception e)
{
eprintStackTrace();
}
}
/
输出Excel
@param os
/
public static void writeExcel(OutputStream os)
{
try
{
/
只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,
因为类WritableWorkbook的构造函数为protected类型
method(1)直接从目标文件中读取WritableWorkbook wwb = WorkbookcreateWorkbook(new File(targetfile));
method(2)如下实例所示 将WritableWorkbook直接写入到输出流
/
WritableWorkbook wwb = WorkbookcreateWorkbook(os);
//创建Excel工作表 指定名称和位置
WritableSheet ws = wwbcreateSheet("Test Sheet 1",0);
//往工作表中添加数据
//1添加Label对象
Label label = new Label(0,0,"this is a label test");
wsaddCell(label);
//添加带有字型Formatting对象
WritableFont wf = new WritableFont(WritableFontTIMES,18,WritableFontBOLD,true);
WritableCellFormat wcf = new WritableCellFormat(wf);
Label labelcf = new Label(1,0,"this is a label test",wcf);
wsaddCell(labelcf);
//添加带有字体颜色的Formatting对象
WritableFont wfc = new WritableFont(WritableFontARIAL,10,WritableFontNO_BOLD,false,
UnderlineStyleNO_UNDERLINE,jxlformatColourRED);
WritableCellFormat wcfFC = new WritableCellFormat(wfc);
Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC);
wsaddCell(labelCF);
//2添加Number对象
Number labelN = new Number(0,1,31415926);
wsaddCell(labelN);
//添加带有formatting的Number对象
NumberFormat nf = new NumberFormat("###");
WritableCellFormat wcfN = new WritableCellFormat(nf);
Number labelNF = new jxlwriteNumber(1,1,31415926,wcfN);
wsaddCell(labelNF);
//3添加Boolean对象
Boolean labelB = new jxlwriteBoolean(0,2,false);
wsaddCell(labelB);
//4添加DateTime对象
jxlwriteDateTime labelDT = new jxlwriteDateTime(0,3,new javautilDate());
wsaddCell(labelDT);
//添加带有formatting的DateFormat对象
DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
WritableCellFormat wcfDF = new WritableCellFormat(df);
DateTime labelDTF = new DateTime(1,3,new javautilDate(),wcfDF);
wsaddCell(labelDTF);
//添加对象,jxl只支持png格式
File image = new File("f:\\2png");
WritableImage wimage = new WritableImage(0,1,2,2,image);
wsaddImage(wimage);
//写入工作表
wwbwrite();
wwbclose();
}
catch(Exception e)
{
eprintStackTrace();
}
}
/
拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象
尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,
以使单元格的内容以不同的形式表现
@param file1
@param file2
/
public static void modifyExcel(File file1,File file2)
{
try
{
Workbook rwb = WorkbookgetWorkbook(file1);
WritableWorkbook wwb = WorkbookcreateWorkbook(file2,rwb);//copy
WritableSheet ws = wwbgetSheet(0);
WritableCell wc = wsgetWritableCell(0,0);
//判断单元格的类型,做出相应的转换
if(wcgetType == CellTypeLABEL)
{
Label label = (Label)wc;
labelsetString("The value has been modified");
}
wwbwrite();
wwbclose();
rwbclose();
}
catch(Exception e)
{
eprintStackTrace();
}
}
读取Excel的第三方工具一般可以用jxl或者poi。jxl比较轻量,poi功能更强大一点。如果数据量较小,推荐jxl,百万级的推荐poi。
从我代码中取出来的一部分,你自己参考下吧。
流程就是:
1、创建workbook对象
2、读取sheet
3、读取行,循环行读取列值
4、将列值拼装成insert语句
5、执行sql
其中要注意的几个问题是:列值合法验证,sql语句过长问题(mysql支持的一条sql不能超过1M好像,这个可以配置的)。列值验证好说,sql语句过长可以循环固定行数分批次执行。整个东西不难,你可以在网上搜索到相关资料。
public void scanXlsx(String path) throws IOException {
loginfo("进入Xlsx扫描方法,扫描路径为:{}", path);
// 初始化文件输入流
InputStream is = new FileInputStream(path);
// 初始化workbook对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
// 定义XLSX行对象
XSSFRow xssfRow;
// 定义XLSX sheet对象
XSSFSheet xssfSheet;
// 获得sheet数目
int sheet_sum = xssfWorkbookgetNumberOfSheets();
loginfo("该excel共有<" + sheet_sum + ">个工作簿!");
// 初始化读取记录行数,跳过表头,默认开始就读取一行
rows_index = 1;
/
循环遍历每个工作簿
/
for (int numSheet = 0; numSheet < sheet_sum; numSheet++) {
logdebug("进入循环读页,当前页为Sheet{}", numSheet + 1);
// 初始化sheet对象
xssfSheet = xssfWorkbookgetSheetAt(numSheet);
// 判断sheet所在页内容是否为空
if (xssfSheet == null) {
continue;
}
// 获得第numSheet个工作表的总行数
rows_sum = xssfSheetgetPhysicalNumberOfRows() - 1;
/
如果工作簿的总行数为0或1,那么就跳出本次循环,继续下一个工作簿
/
if (rows_sum <= 1) {
logdebug("该sheet无有效数据");
continue;
}
// 一次批量插入100条,计算循环次数
int loops = 1;
if (rows_sum % 100 == 0) {
loops = rows_sum / 100;
} else {
loops = rows_sum / 100 + 1;
}
logdebug("循环次数:{}", loops);
// 初始化每个numSheet的成功行数
rows_success = 0;
loginfo("第<" + numSheet + ">个工作簿共<" + rows_sum + ">行!");
int m = 0;// 结束条数
int j = 0;// 起始条数
int s = 0;// 起始条数
for (int h = 0; h < loops; h++) {
j = h 100 + 1;// 开始条数
s = j;
m = (h + 1) 100 + 1;// 计算结束条数
if (m > rows_sum) {
m = rows_sum;
}
loginfo("文件第<" + h + ">次从<" + j + ">行开始读取,读取到<" + m + ">行结束");
// 循环遍历每个sheet的行
out: for (; j < m; j++) {
// 获得行对象
xssfRow = xssfSheetgetRow(j);
/
遍历每列的值
/
for (int i = 0; i < 13; i++) {
// 获得列值
value = ScanUtilsgetValue(xssfRowgetCell(i));
switch (i) {
/
第一列:
/
case 0:
break;
/
第二列:
/
case 1:
break;
。。。
default:
break;
}
}
// 增加一条读取记录
++rows_index;
}
}
}
isclose();
}
以上就是关于怎么用java把数据库里的数据写入到excel表中全部的内容,包括:怎么用java把数据库里的数据写入到excel表中、怎么用java程序把excel导入到mysql数据库、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)