js和java按照json格式导出数据
工作中遇到了需要从表中取出大量数据后,再和所得数据进行对比取值的事,这不能一个数据一个数据的录吧,于是就取了点巧,自己写了一个简单的程序,真是节省了我的不少时间,废话少说吧。
这个程序主要是用来将符合规范的数据进行处理之后,通过字符串拼接的方式进行json格式的转换。
js代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script>
/**
* @author Liuhang
*/
function readThis(){
var filePath= document.all.upfile.value;
var oXL = new ActiveXObject("Excel.application");
var oWB = oXL.Workbooks.open(filePath);
oWB.worksheets(1).select();
var oSheet = oWB.ActiveSheet;
try {
var i = 1;//行
var j = 2;//列
var k = 1;//固定读取第一列的位置 始终不变
//用来进行交叉的键值读取
var flag = true;
document.write("var obj={");
var cell = '';
//获取总行数
var rows = oSheet.usedrange.rows.count;
//获取总列数
var cols = oSheet.usedrange.columns.count;
//循环读表
while(true)
{
if(i>rows){ //如果读取的数据超过总行数
j++;
i=1;
flag = true;
//如果读到列末
if(j==cols+1){
document.write("}};");
break;
}else{
document.write("},");
}
}
//交叉读取键值
if(flag){
//第一个json键
if(i==1){
cell = oSheet.Cells(i,j).value;
document.write("'"+cell+"':{");
i++;
flag = false;
//以列为键,先读第一个json数组对应的键,跳过循环,开始遍历值
continue;
//
}else{
cell = oSheet.Cells(i,j).value; //(行,列)
flag = false;
i++;
}
}else{
cell = oSheet.Cells(i,k).value; //(行,列)
flag = true;
}
//主要用来输出数据,拼字符串
if(flag){
document.write("'"+cell+"':");
}else{
if(i==rows+1){
//读到空格子则转换空字符串''
if(cell==null){
document.write("''");
}else{
document.write("'"+cell+"'");
}
}else{
if(cell==null){
document.write("''");
}else{
document.write("'"+cell+"',");
}
}
}
}
}
catch(e) {
alert(e.message);
}
oWB.Close(); //不close工作簿的话,后果还是挺严重的。
oWB = null;
oXL = null;
}
</script>
<input type="file" id="upfile" /><input type="button" οnclick="readThis();" value="读取">
<br>
<textarea id="txtArea" cols=50 rows=10></textarea>
</html>
导出的数据就是这样,IE7,8,9都能支持,FireFox我也试过,搜了些资料,说是要下一个下IE Tag组件,但是下了就是不好使所以有知道的朋友可以留言告诉一下,非常感谢!!!
用带有IE浏览器功能的软件也行,本人用的是EditPlus,可以使用
-------------------------------------------------------------昏隔线------------------------------------------------------------------------------
下面是java的代码:
package readExcl;
import java.io.File;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
/**
* @author Liuhang
*
*/
public class ReadExc {
public static void main(String[] args) {
int i;
int j;
//第一列的值 (json)
int k;
//是否是读的键值对中的值
boolean flag = false;
Sheet sheet;
Workbook book;
Cell cell1;
try {
//t.xls为要读取的excel文件名
book= Workbook.getWorkbook(new File("res/侧面回弹修正.xls"));
sheet=book.getSheet(0);
// json
i = 0; //行
j = 1; //列
k = 0; //固定读取第一列的位置 始终不变
cell1 = null;
//用来进行交叉的键值读取
flag = true;
System.out.println("var obj={");
while(true)
{
/*
* json格式实现
*/
if(i>=sheet.getRows()){ //如果读取的数据超过总行数 进行行列初始化
j++;
i=0;
flag = true;
//如果读到了列的末尾,则结束循环
if(j==sheet.getColumns()){
System.out.print("}};");
break;
}else{
System.out.print("},");
}
}
//交叉读取键值
if(flag){
//第一个json键
if(i==0){
cell1 = sheet.getCell(j,i);
System.out.print("'"+cell1.getContents()+"':{");
i++;
flag = false;
//以列为键,先读第一个json数组对应的键,跳过循环,开始遍历值
continue;
}else{
cell1 = sheet.getCell(j,i); //(列,行)
flag = false;
i++;
}
}else{
cell1 = sheet.getCell(k,i); //(列,行)
flag = true;
}
//主要用来输出数据,拼字符串
if(flag){
System.out.print("'"+cell1.getContents()+"':");
}else{
if(i==sheet.getRows()){
System.out.print("'"+cell1.getContents()+"'");
}else{
System.out.print("'"+cell1.getContents()+"',");
}
}
}
//关闭工作薄
book.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
本想插两张图片的,但是好像放了图片不显示,好像还不能上传文件。。。就简单说下步骤吧。
java建一个工程,在src的统计目录下创建一个文件夹,将excel文件都放到res文件夹中
只用修改java文件中excel的文件名就能实现对不同的excel导出数据。
这两种方式都只能导出符合规范的数据,也可以根据自己的业务进行一些修改。
规范格式一:
规范格式二:
整个过程就是这样了,表达能力有限,注释有点少,不懂的可以留言。。。