锐浪报表-实现导入导出

  • 实现思路
  • 代码实现

实现思路

  • 导入导出实现思路:
    我们使用锐浪报表自带的导出功能导出 XX.grf 后,鼠标右键是可以像编辑文本一样编辑内容的.由此联想到,用记事本手写一个模板改一下后缀名是不是也可以当作报表模板.答案是可以的(不信你去试一下).所以我们做导入导出就可以像文本的导入导出一样.而且文本可以通过json格式化,我们就可以操作模板里面的属性.

代码实现

  • 导出代码实现
public void expReport() {reportInfo = DaoFactory.getReportManageDao().getReport(id);HttpServletResponse response = Struts2Utils.getResponse();response.setContentType("grf/plain");response.addHeader("Content-Disposition","attachment;filename=" + genAttachmentFileName(reportInfo.getName(), "JSON_FOR_UCC_") + ".grf");BufferedOutputStream buff = null;ServletOutputStream outStr = null;try {outStr = response.getOutputStream();buff = new BufferedOutputStream(outStr);buff.write(reportInfo.getFile().getBytes("UTF-8"));buff.flush();buff.close();} catch (Exception e) {e.printStackTrace();LOGGER.error("导出文件文件出错:{}",e);} finally {try {buff.close();outStr.close();} catch (Exception e) {e.printStackTrace();LOGGER.error("关闭流对象出错 e:{}",e);}}}//处理文件名public String genAttachmentFileName(String cnName, String defaultName) {try {cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");} catch (Exception e) {e.printStackTrace();cnName = defaultName;}return cnName;}
  • 导入代码实现
@Transactional
public void importReport(ReportInfo reportInfo,File uploadReportFile){log.debug("reportDao:importReport--start---");log.debug("文件大小:"+uploadReportFile.length()/1024+"KB");//这个字符处理是重点String file = txt2String(uploadReportFile);JSONObject json = JSONObject.parseObject(file);//**********************以下内容是为了满足业务逻辑,可以参考但是与导入无关***************************//String storageId = reportInfo.getStorageId();//获取明细网格内的字段JSONArray jsonArray = json.getJSONObject("DetailGrid").getJSONObject("Recordset").getJSONArray("Field");Long sId = DBUtils.toLong(storageId);Storage storage = DaoFactory.getStorageDao().get(sId);List<Map<String,Object>> tableColumn = DaoFactory.getReportManageDao().getTableColumn("'"+storage.getTableName()+"'");String column_E="";for (int i = 0; i < jsonArray.size(); i++) {String reportC = jsonArray.getJSONObject(i).getString("Name");for (Map<String, Object> map : tableColumn) {String tableC = DBUtils.toString(map.get("LI"));if(reportC.equals(tableC)){column_E +=tableC + ",";}}} column_E = column_E.substring(0, column_E.length()-1);reportInfo.setEnglishField(column_E);//**********************以上内容是为了满足业务逻辑,可以参考但是与导入无关***************************//reportInfo.setFile(file);DaoFactory.getReportManageDao().insert(reportInfo);log.debug("reportDao:importReport--end---");
}
  • 文件字符处理
 public static String txt2String(File file){StringBuilder result = new StringBuilder();try {String line;BufferedReader br=new BufferedReader(new UnicodeReader(new FileInputStream(file),"UTF-8"));  line = br.readLine();while (line != null) {result.append(line);result.append("\n");line = br.readLine();}br.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}return result.toString();}
  • UnicodeReader类
    这个类是国外一位大神写的,为了解决UTF-8的BOM问题
public class UnicodeReader extends Reader{PushbackInputStream internalIn;InputStreamReader internalIn2 = null;String defaultEnc;private static final int BOM_SIZE = 4;/*** * @param in*            inputstream to be read* @param defaultEnc*            default encoding if stream does not have BOM marker. Give NULL*            to use system-level default.*/UnicodeReader(InputStream in, String defaultEnc) {internalIn = new PushbackInputStream(in, BOM_SIZE);this.defaultEnc = defaultEnc;}public String getDefaultEncoding() {return defaultEnc;}/*** Get stream encoding or NULL if stream is uninitialized. Call init() or* read() method to initialize it.*/public String getEncoding() {if (internalIn2 == null)return null;return internalIn2.getEncoding();}/*** Read-ahead four bytes and check for BOM marks. Extra bytes are unread* back to the stream, only BOM bytes are skipped.*/protected void init() throws IOException {if (internalIn2 != null)return;String encoding;byte bom[] = new byte[BOM_SIZE];int n, unread;n = internalIn.read(bom, 0, bom.length);if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00)&& (bom[2] == (byte) 0xFE) && (bom[3] == (byte) 0xFF)) {encoding = "UTF-32BE";unread = n - 4;} else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)&& (bom[2] == (byte) 0x00) && (bom[3] == (byte) 0x00)) {encoding = "UTF-32LE";unread = n - 4;} else if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB)&& (bom[2] == (byte) 0xBF)) {encoding = "UTF-8";unread = n - 3;} else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) {encoding = "UTF-16BE";unread = n - 2;} else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) {encoding = "UTF-16LE";unread = n - 2;} else {// Unicode BOM mark not found, unread all bytesencoding = defaultEnc;unread = n;}// System.out.println("read=" + n + ", unread=" + unread);if (unread > 0)internalIn.unread(bom, (n - unread), unread);// Use given encodingif (encoding == null) {internalIn2 = new InputStreamReader(internalIn);} else {internalIn2 = new InputStreamReader(internalIn, encoding);}}public void close() throws IOException {init();internalIn2.close();}public int read(char[] cbuf, int off, int len) throws IOException {init();return internalIn2.read(cbuf, off, len);}
}

我不生产代码,我只是代码的搬运工!

如果大家有什么不懂的可以私信.我看到了就会回复的.


锐浪报表-实现导入导出相关推荐

  1. 锐浪报表 Grid++Report 导出其它格式文件

    锐浪报表 Grid++Report 导出其它格式文件 Grid++Report控件设计的报表,不仅可以打印,还可以导出8种格式的报表文件. 在Grid++Report的打印浏览中,有指定导出文件的对话 ...

  2. 报表工具对比之润乾报表与锐浪报表对比

    目前市场上报表工具五花八门,国内的.国外的.开源的.收费的,让人不免有眼花缭乱之感.本文将简单地从报表设计.数据处理.数据填报.数据分析.集成调用几方面对大家使用的比较多的润乾报表和锐浪报表(Grid ...

  3. 【Winform】锐浪报表使用

    在发开报表时,使用了锐浪报表. 需要注意的一些细节: 1.给staticbox设置文本,通过GridppReport的变量,使用ControlByName获取到控件后进行设置文字 _report.Co ...

  4. .NET 程序下锐浪报表 (Grid++ Report) 的绿色发布指南

    在锐浪报表官方为 CSharp 编写的开发文档:"在C#与VB.NET中开始使用说明.txt" 中,关于发布项目是这么描述的: ★发布你的项目,用VS.NET制作安装程序: 1.先 ...

  5. 锐浪报表(Grid++Report)实现动态图片链接

    使用锐浪报表配置打印模板的时候,需要链接到网络图片,拖出图片控件. 之后在初始化加载脚本里面填上下面的代码 var paraImgPath = Report.ParameterByName(" ...

  6. 锐浪报表 VFP9 全示例文件,示例所用锐浪版本号为 6.8.22.1201

    锐浪报表 VFP9 全示例文件,示例所用锐浪版本号为 6.8.22.1201 原文地址: https://mp.weixin.qq.com/s/jY0WiDlpi-sFfFJVuipUIQ 被人安利了 ...

  7. 锐浪报表(实现打印机打印配货单功能)

    一.安装锐浪报表(写的比较絮叨,见谅~ 见谅~ 希望对你有帮助) 1.网上找到安装包下载安装就行,安装之后有三个程序.Grid++Report 帮助文档(你想要的都在里面).Grid++Report ...

  8. 锐浪报表(悦商云B2)报表排序设置

    锐浪报表(悦商云B2)报表排序设置 锐浪报表,排序打印设置: 设置方法:点击[记录集]→[行为]→[排序字段]→需要排序的字段,如果是多个字段选择[多选],如果某个字段需要倒序后面加 desc(空格+ ...

  9. 火山PC锐浪报表使用教程4(Grid++Report)

    前言: 太久没用锐浪了,如有讲的不到位的地方,请多多包含 文章里讲的太详细会比较繁琐,因此会漏掉一些细节 接续上几课代码,继续解锁新知识 第一课:点击本链接 第二课:点击本链接 第三课:点击本链接 一 ...

  10. ​锐浪报表 Grid++Report HTML格式文本,win10下划线变删除线​

    锐浪报表 Grid++Report  HTML格式文本,在win10下划线变删除线 锐浪报表 Grid++Report  打印合同,一真使用HTML格式文本,已经好几年了.今天一台华为win10手提电 ...

最新文章

  1. 说一说activity
  2. Action 中 Response already committed 解决办法
  3. [HEOI2016/TJOI2016]排序
  4. 没有qpress_关于网站没反应的阿里云帮助中心问题解答
  5. 关于collect2: cannot find ld的解决办法
  6. java通过poi读取excel中的日期类型数据或自定义类型日期
  7. 49 - 算法 - Leetcode 112 路径总和 -二叉树递归 带参数一起递归
  8. arcgis加载天地图_【arcgis地图实战】之天地图在线服务加载
  9. hdu 1695GCD容斥
  10. 产品经理三大文档--BRD、MRD、PRD解读
  11. 安装SQL Sever2017时出现“Polybase要求安装Oracle JRE 7更新51(64位)或更高版本规则失效”的解决办法
  12. 人工智能之产生式系统
  13. java高速公路收费管理计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  14. 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 ModificationFunctionMapping 元素中没有支持当前操作的 Inse...
  15. 软件工程毕业设计课题(80)微信小程序毕业设计PHP电影视频播放小程序系统设计与实现
  16. 容器Docker学习系列五~命令学习history,save, import
  17. input框只能输入非负数
  18. Cura切片3d打印设置
  19. 谷歌浏览器如何收藏网站 谷歌浏览器收藏网站的方法步骤
  20. 农村创业年收入可以实现三五十万元?有哪些投资不大的项目

热门文章

  1. Mac安装双系统后在Windows下体验mac原生触控功能(双指、三指、四指)
  2. i5 9600k和i5 9400的差距?哪个好?对比才知道
  3. java stream list转map
  4. paper - A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising
  5. vue-cli开发Vue项目时定义环境变量需加VUE_APP前缀
  6. IDEA破解码(至2099)
  7. 大华事件检测智能服务器,大华股份发布全新智能视频监控服务器,提供高达768Mbps的存储带宽...
  8. 颠覆Web前端开发的HTML5技术
  9. 【毕业设计】物联网智能温控风扇设计与实现 - stm32 单片机 嵌入式
  10. 使用AT命令和GPRS无线模块开发(软件)