java根据url获取网络json格式数据,并以excel方式导出。

在网上参考了一些资料,最后进行了整理。

转载声明1:https://www.cnblogs.com/itred/p/4826028.html 作者:itRed  邮箱:it_red@sina.com  博客链接:http://www.cnblogs.com/itred  GitHub链接:http://github.com/itred

转载声明2:https://blog.csdn.net/qq_32253371/article/details/78083391

转载声明3:https://www.cnblogs.com/freeweb/p/5079316.html

所需jar包,附赠gson和fastjson

链接:https://pan.baidu.com/s/1djXQVQr_nbc-1Qd2KHOdVQ 
提取码:rilk 

首先得搭好sturts2,上面第二条链接,此段代码获得json数据格式是一个json数组,如[{"a":"w","b":"w"},{"a":"s","b":"s"}]


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 第三方插件导出Excel
 * 
 * @author Red
 */
public class WriteExcelAction extends ActionSupport {
	HttpServletRequest request = ServletActionContext.getRequest();
	HttpServletResponse response = ServletActionContext.getResponse();
	OutputStream out = null;
	String result = "";
	BufferedReader in = null;
	StringBuffer sb = null;
	int count= 0;;
	public void writeExcel() throws RowsExceededException, WriteException, IOException {
        OutputStream os = response.getOutputStream();// 取得输出流
        response.reset();// 清空输出流
        response.setHeader("Content-disposition", "attachment; filename=testRed.xls");// 设定输出文件头
        response.setContentType("application/msexcel");// 定义输出类型
        WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
        String tmptitle = "1"; // 标题
        WritableSheet wsheet = wbook.createSheet(tmptitle, 0); // sheet名称
        // 设置excel标题
        WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16, WritableFont.BOLD, false,
                                              UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
        WritableCellFormat wcfFC = new WritableCellFormat(wfont);
        wcfFC.setBackground(Colour.AQUA);
        wsheet.addCell(new Label(1, 0, tmptitle, wcfFC));
        wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD, false,
                                           UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
        wcfFC = new WritableCellFormat(wfont);
        // 开始生成主体内容
        wsheet.addCell(new Label(0, 2, "性别"));
        wsheet.addCell(new Label(1, 2, "年龄"));
        wsheet.addCell(new Label(2, 2, "身份证"));

        String urlNameString = XXX";
		URL realUrl = new URL(urlNameString);
		URLConnection connection = realUrl.openConnection();
		connection.connect();
		in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
		String line;
		while ((line = in.readLine()) != null) {
			result += line;
			//result += "\r\n";
		}

        JSONArray jArray = JSONArray.fromObject(result);

		for (int i = 0; i < jArray.length(); i++) {
			JSONObject subObject = jArray.getJSONObject(i);  

	            wsheet.addCell(new Label(0, count + 3, subObject.getString("xxx")));           
	            wsheet.addCell(new Label(1, count + 3, subObject.getInt("xxx")+"")+"");           
	            wsheet.addCell(new Label(2, count + 3, subObject.getString("xxx")));          
	            count++;                                                                              

		}

        // 主体内容生成结束
        wbook.write(); // 写入文件
        wbook.close();
        os.close(); // 关闭流
    }
}

excel最大存储65536行数据,如果数据超过了,会报异常:jxl.write.biff.RowsExceededException: The maximum number of rows permitted on a worksheet been exceeded,这里建议分批次下载,比如第一次限定下载到65500就结束下载,

if(count > 65500) {
     break;
}

第二次将循环开始值设为65501; 

for (int i = 65501; i < jArray.length(); i++) {

这样就解决了,数据量过大的问题。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值