js和java按照json格式导出数据

本文介绍了一种使用JS和Java从Excel表格中读取数据并将其转换为JSON格式的方法,适用于批量数据处理和对比需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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导出数据。


这两种方式都只能导出符合规范的数据,也可以根据自己的业务进行一些修改。


规范格式一:



规范格式二:




整个过程就是这样了,表达能力有限,注释有点少,不懂的可以留言。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值