js和java按照json格式導出數據

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導出數據。


這兩種方式都只能導出符合規範的數據,也可以根據自己的業務進行一些修改。


規範格式一:



規範格式二:




整個過程就是這樣了,表達能力有限,註釋有點少,不懂的可以留言。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章