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" onclick="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導出數據。
這兩種方式都只能導出符合規範的數據,也可以根據自己的業務進行一些修改。
規範格式一:
規範格式二:
整個過程就是這樣了,表達能力有限,註釋有點少,不懂的可以留言。。。