写在前面

之前开发的时候需要实现excel表格文件的共享功能,并且是同一张大表格,不同的人只能看里面的一部分数据。由于数据每天更新,且每次都要手动筛选出给不同的人看的数据。很是繁琐。希望能有一个方便的方法来实现:维护这个数据大表的人只需要更新这张表,其他人就可以自己随时获取自己有权查看的那部分数据。

也许你有更好更简单的方法来实现。欢迎留言我。作为初学者写这篇文字只是记录一下我解决问题的过程。因为这里涉及到了Oracle数据库的操作,javaEE、jsp的编写,前台HTML、javascript、DOM 的操作,等方面。方便今后忘了的时候自己翻阅。

下面是正文。

方案一、使用数据库+plsqldev (.xlsx)

首先我想到的是将这个数据大表(一个.xlsx文件),转换成数据表,存入数据库中(我这里使用的是Oracle(这不是重点)),然后创建view,并设置列名为原 .xlsx 文件的列名。
维护数据的人只要在更新数据的时候使用 plsqldev 独立版(无需安装Oracle客户端即可使用的版本),执行下面的sql:

select * from TABLENAME order by ID for update;
-- 这里若不使用“order by ID”,有可能结果不是按照当初导入的顺序呈现的。

将自己的excel文件复制粘贴到数据库即可。然后想要查看的人查询自己的view,并使用 plsqldev 的导出到 .xlsx 功能即可导出。

优点:简单粗暴。使用者会使用 plsqldev 即可操作,而且实现了权限隔离,无法查看无权查看的数据的功能需求。

缺点:1.使用者不同的电脑环境 配置 plsqldev 时会出现各种情况,需要处理并且很棘手、2.用户体验差、3.使用时需要学习成本,学习如何使用 plsqldev 。

//无源码

方案二、使用数据库+jsp(.csv)

同样是使用数据库将表格数据迁移至数据库里,在服务器端使用 jsp 来实现 数据从数据库导出到 .csv 的功能。在 jsp 设置参数判断用户的权限,来导出对应是view数据。并呈现给用户。先说说这样做的优缺点。

优点:实现了权限隔离,无法查看无权查看的数据的功能需求。简单粗暴用户只需一个链接即可下载到自己所需的 .csv 文件。

缺点:1.呈现的为 .csv 文件,无发保存表格的样式,体验稍差。2.用户需要自己调节样式并另存为 .xlsx 才能保存表格的样式,然而毕竟会用户不会操作,造成体验差。

实现的源码如下:

<%@page import="com.tltable.jdbc.tltableDAO"%>
<%@ page language="java" pageEncoding="UTF-8"%><%!String sql = "select * from TABLENAME order by u_uid";// 这只是个demo,做测试。//可以通过传参实现执行不同的 sql 来查询不同的 table (view)String[][] value = tltableDAO.selectToArray(sql);// tltableDAO.selectToArray 函数执行 sql 并将返回结果转换为数组的格式。String csvStr = this.ArrayToCsvstr(value);public String ArrayToCsvstr(String[][] value) {String csvstr = "";for (int j = 0; j < value.length; j++) {if (value[j] == null) {csvstr = "获取值为空。";break;}for (int i = 0; i < value[j].length; i++) {csvstr += value[j][i] + ",";}csvstr += "\n";}return csvstr;}
%>
<%response.setHeader("Content-type", "application/octet-stream;charset=GBK");//之前没有加 charset=GBK ,默认的 UTF-8 下载下来用excel打开会是乱码。response.setHeader("Content-Disposition", "attachment; filename=\"my-data.csv\"");//生成的csv名为my-data.csv。也可以设置为动态的文件名。//String data = request.getParameter("csv_text");out.println(csvStr);//把数据写入到浏览器,以下载的方式
// 当然在输出之前可以在 csvStr 前添加一行表数据的列名。增加用户体验。
%>

tltableDAO.selectToArray 代码:

/*** 查询数据库,并转化成 String[][]* * @param sql* @param args* @return*/public static String[][] selectToArray(String sql, Object... args) {Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultset = null;String[][] aaa = null;try {connection = JDBCTools.getConnection();     preparedStatement = connection.prepareStatement(sql);for (int i = 0; i < args.length; i++) {preparedStatement.setObject(i + 1, args[i]);}       resultset = preparedStatement.executeQuery();aaa = tltableDAO.getColumnValues(resultset);} catch (Exception e) {e.printStackTrace();} finally {JDBCTools.releaseDB(resultset, preparedStatement, connection);}return aaa;}
//这里涉及的 JDBCTools.java 我想网上会有很多的。我就不贴出来了

方案三、使用数据库+伪静态HTML(.csv 或 .xlsx)

这个方案我认为是最好的了。当然也是我花了很长时间才想到的。基于方案一 方案二的弊端,本方案做了尽可能的兼容并提升了用户体验。

在方案二中我们可以将数据库的数据转换成数组,本方案则是将数组推送到 web 前端。这样一来,可以实现

1、 以<table>的形式呈现出来

IE10+以及其他新版浏览器可以使用 handsontable 插件来实现大数据表格在 前端的完美呈现。 反正我觉得用户不需要。就没研究。感兴趣的可自己去官网查看。handsontable官网

用户可直接查看(我感觉没必要)。且客户端浏览器参差不齐,我公司基本使用的都是IE8。╮(╯▽╰)╭ IE8 太多效果没法呈现。

2、 使用 JavaScript 配合使用 IE 的 ActiveXObject 调用 Excel 导出数据到 Excel

前提是电脑上安装了 Office 的 excel 。源码如下:

<a href="#" onclick="downloaddata_ie('testtable')">IE导出</a>
function downloaddata_ie(tableid) {var curTbl = document.getElementById(tableid);var oXL = new ActiveXObject("Excel.Application");//创建AX对象excel var oWB = oXL.Workbooks.Add();//获取workbook对象 var oSheet = oWB.ActiveSheet;//激活当前sheet var Lenr = curTbl.rows.length;//取得表格行数 for (i = 0; i < Lenr; i++) {var Lenc = curTbl.rows(i).cells.length;//取得每行的列数 for (j = 0; j < Lenc; j++) {oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;//赋值 }}oXL.Visible = true;//设置excel可见属性 }

或者下面的代码会自动在 excel 中弹出保存对话框,且使用的非赋值操作而是复制操作:

var idTmr;
function saveAsXlsx(tableid,filename) {// 整个表格拷贝到EXCEL中var curTbl = document.getElementById(tableid);var oXL = new ActiveXObject("Excel.Application");// 创建AX对象excelvar oWB = oXL.Workbooks.Add();// 获取workbook对象var xlsheet = oWB.Worksheets(1);// 激活当前sheetvar sel = document.body.createTextRange();sel.moveToElementText(curTbl);// 把表格中的内容移到TextRange中sel.select();// 全选TextRange中内容sel.execCommand("Copy");// 复制TextRange中内容xlsheet.Paste();// 粘贴到活动的EXCEL中oXL.Visible = true;// 设置excel可见属性try {var fname = oXL.Application.GetSaveAsFilename(filename+".xlsx","Excel Spreadsheets (*.xlsx), *.xls11");} catch (e) {print("Nested catch caught " + e);} finally {oWB.SaveAs(fname);oWB.Close(savechanges = false);// xls.visible = false;oXL.Quit();oXL = null;// 结束excel进程,退出完成// window.setInterval("Cleanup();",1);idTmr = window.setInterval("Cleanup();", 1);}
}
function Cleanup() {window.clearInterval(idTmr);CollectGarbage();
}

3、 非 IE 浏览器 只能生成 .csv 文件供用户下载

可以继续使用 jsp 的方案,也可以使用 web 前端 的解决方案。

web 前端 解决方案 源码:

<a href="#" download="aaa.csv" onclick="downloaddata_notie(this)">非IE导出</a>
    function downloaddata_notie(aLink) {var str = "1,2,3,4,5\n9,8,7,5";//demo数据 str = encodeURIComponent(str);//防止乱码aLink.href = "data:text/csv;charset=utf-8,\ufeff" + str; //  “\ufeff” 为 BOM 头aLink.click();return false;}

感谢您阅读到这里。其实写这篇文章的时候我还没有将这个功能实现,代码都是做的demo。

先写篇文章记录下来,不然我真的会忘。

数据库表格数据导出到excel方法总结相关推荐

  1. jQuery表格数据导出成Excel插件

    下载地址 一款能将网页上的Table表格数据导出成Excel文件的插件,这个导出插件使用jQuery代码实现的,很实用的导出Excel插件. dd:

  2. 【VB】MSHFlexGrid表格数据导出到Excel

    [文章背景] 在VB系统中,通过添加"导出为Excel"按钮来实现将MSHFflexGrid表格中的数据导出到Excel表中,并由用户决定是否保存. [如何实现] 在定义Excel ...

  3. 前端表格数据导出为 Excel 的简单方法

    方法一 /*** 导出表格数据到 Excel 文件* @param {Array} tableData - 表格数据* @param {Array} fieldLabels - 表头组成的数组* @p ...

  4. vue + element 表格数据导出为excel表格

    由于业务内容的需要,我们有时候需要将表格中的数据做导出,生成一个excel表格,以下操作主要实现将element中的table数据生成一个excel表格并做下载操作. 效果图如下: 点击图中导出按钮时 ...

  5. 前端进行表格数据导出到Excel表格

    在一些项目中,会有可以导出表格数据的需求,这个导出的功能,前端就可以来完成,不过需要后端配合传过来表格头所对应的属性名以及这些属性名所对应的中文,搭配返回的数据,前端进行处理即可,虽然百度里面会有一大 ...

  6. js 实现网页表格数据导出到Excel表

    最近在做一个项目,涉及到导出数据到Excel表格,由于是采用的前后端分离模式开发的,之前常用的方法已经失效,在网上找了一些资料和方法 js文件下载地址 1.是采用的一个插件 xlsx.full.min ...

  7. 将Html中表格数据导出为Excel

    1.自定义JavaScript函数实现 <input type="button" name="out_excel" onClick="Autom ...

  8. java生成html表格数据_使用Java将表格数据导出成Excel格式

    前言:本文使用后台处理的办法导出前端表格中显示的数据. 引入依赖 org.apache.poi poi 3.17 书写PoiUtils public classPoiUtils {public sta ...

  9. html页面上的表格导出为excel文件,Web html table export to excel 网页上的表格数据导出到Excel文件中 使用心得...

    在网上搜索到几种方法,经测试得出二种比较简单而且可行方法, 第一种:使用JAVASCRIPT,不用重新从 Database 获得数据.直接把WEB上面的表格保存下来. A B function Aut ...

  10. Java实现将表格数据导出成Excel

    1.添加maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexce ...

最新文章

  1. CSS中的字体属性和使用
  2. python 加速器 numba 示例
  3. python 微服务框架_Python微服务框架NameKo 性能体验
  4. 【Win10开发】自定义标题栏
  5. shiro表单认证(系统默认的form认证器)
  6. css箭头超链接,css超链接
  7. python向服务器请求压缩数据及解压缩数据
  8. 以“基”取胜:戴尔科技云平台 释放企业新动能
  9. 梯度下降python编程实现_【机器学习】线性回归——单变量梯度下降的实现(Python版)...
  10. Spring学习手札(二)面向切面编程AOP
  11. 被玩坏的“网抑云音乐“可视化数据分析
  12. 计算机找不到ie浏览器,WinXP系统IE浏览器不见了怎么办?
  13. SHFileOperation DeleteFolder
  14. etc的常见算法_UI图集压缩优化,以及对Dither和ETC1算法的深入了解
  15. js监听浏览器tab页面变化
  16. 30岁之后想转行,可行吗?这20条建议让你少走弯路!
  17. 20230106 作业
  18. pycharm 格式化html文件
  19. 服务交付服务规范十要素
  20. 数据分析 —— 数据挖掘是什么、能干嘛、怎么做

热门文章

  1. Binary translation is incompatible with long mode on this platform
  2. HDU 2056 Rectangles
  3. 让 Windows 的 R 用上 CUDA
  4. 算法|决策树算法究竟说的是什么?
  5. 8、kubernetes之存储卷资源
  6. 使用Rotativa在ASP.NET Core MVC中创建PDF
  7. 站立会议05--个人进度
  8. 框架整合——Spring与MyBatis框架整合
  9. Js中去除数组中重复元素的4种方法
  10. console.log的问题