问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

asp.net怎么样把excel文件导入到数据库和导出来(紧急求助+高分)

发布网友 发布时间:2022-05-02 12:53

我来回答

3个回答

懂视网 时间:2022-05-02 17:14

本文主要讲前端内容,后端涉及较少,可以认为是使用Java。

首先是excel文件上传,这个较为简单,可以html5的数据接口FormData()进行操作。具体代码如下:

<!DOCTYPE html>
<html>
 <head>
 </head>
 <body>
 <input type="file" id="_file" value=""/><p for="file">或点此选择文件</p> 
     <button id = "file_button" >按钮</button> </body> </html>

然后是对应的javascript

$("#button").click(function(){
 var files = $(‘#_file‘).prop(‘files‘);
 var data = new FormData();
 data.append("upload",files[0]); //因为是只选择一个文件,故而只取file[0]
 $.ajax({
 url: yourPath,
 type: ‘POST‘,
 data: data, 
 cache: false,
 dataType:‘text‘,
 processData: false,
 contentType: false,
 success: function(result) {
  // Do something with the result
 alert("成功");
 },
 error : function(result){
 alert("失败"+result.toString());
 }
 });

});

后端接收到文件之后,将其存储成二进制数组,在数据库中,比如postgresql,使用blob数据类型,然后在java中使用byte数组映射就可以了。

那么怎么从后端存储的文件内容直接在页面上excel呢?这里需要用到sheetJs,官网:http://sheetjs.com/,可以直接取其demo来用,

demo下载地址放在github上了:https://github.com/SheetJS/SheetJS.github.io。 

在这里是直接使用它的一些代码,主要说说思路。

下载后解压是SheetJS.github.io-master文件夹,在而显示生成excel的Js代码主要在SheetJS.github.io-masterassetsjsdropsheet.js中。其中发下其最后是通过调用该文件中以下代码

function handleDrop(e) {
 e.stopPropagation();
 e.preventDefault();
 if(pending) return opts.errors.pending();
 var files = e.dataTransfer.files;
 var i,f;
 for (i = 0, f = files[i]; i != files.length; ++i) {
  var reader = new FileReader();
  var name = f.name;
  reader.onload = function(e) {
  var data = e.target.result;
  var wb, arr;
  var readtype = {type: rABS ? ‘binary‘ : ‘base64‘ };
  if(!rABS) {
   arr = fixdata(data);
   data = btoa(arr);
  }
  function doit() {
   try {
   if(useworker) { sheetjsw(data, process_wb, readtype); return; }
   wb = XLSX.read(data, readtype);
   process_wb(wb);
   } catch(e) { console.log(e); opts.errors.failed(e); }
  }

  if(e.target.result.length > 1e6) opts.errors.large(e.target.result.length, function(e) { if(e) doit(); });
  else { doit(); }
  };
  if(rABS) reader.readAsBinaryString(f);
  else reader.readAsArrayBuffer(f);
 }
 }

说明:SheetJs这个demo中,解析excel使用的是js-xlsx这个库,这个库对excel的操作很多,解析只是一个方面,具体可以上github上看。而根据解析在html上绘制excel表格的是canvas-datagrid.js这个表格控件。

可以看到它是通过FileReader的readAsBinaryString方法读取每个选中的文件,根据文件内容在html中绘制出excel表格,那么我们只要在这里自己从后端接收那个二进制数据,生成一个File对象,再跑同样这段代码就OK。

这个过程中碰到两个问题:

一个就是后端的byte数组传递到前端很不方便,而且我在用ajax传递的时候,二进制数组参数会变成string型。

另一个就是javascript中无法直接新建一个File对象。。

首先第一个问题,二进制数组不能传递,那么就只能传递字符串了,但是不能直接转字符串,那么有什么办法呢?再上面的代码看到,里面有一句

var readtype = {type: rABS ? ‘binary‘ : ‘base64‘ };

说明这个操作可以操作base64编码的字符串,那就是转成base64,这个需要引入apache的一个包,包名为commons-codec,再Maven中引用如下,

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
 <groupId>commons-codec</groupId>
 <artifactId>commons-codec</artifactId>
 <version>1.10</version>
</dependency>

再调用其一个方法,

Base64.encodeBase64String(byteArray); //将byteArray转为base64字符串

这样就可以传输到前端了。

 

再说第二个问题,通过百度发现,javascript有一种数据类型Blob,而File正是基于这种Blob的。

一个Blob对象就是一个包含有只读原始数据的类文件对象

但是Blob是可以初始化来生成的,

var blob = new Blob([base64Data], { type: "mime" }) 然后就可以通过FileReader读取了,再接下来只需要按照demo的代码调用就可以了。。。 reader.readAsBinaryString(blob); ...

将excel文件内容存储到数据库,并可以实时在前端查看(不必生成文件)

标签:doc   postgres   过程   github   选择   excel   base64   git   tty   

热心网友 时间:2022-05-02 14:22

如果你只是要把excel保存到数据库,并不需要进一步的数据统计查询,你就可以简单地在asp.net的界面上放一个上传文件按钮,后台收到上传的excel文件,把它以二进制流的形式保存到SQL Server的Image字段或文件字段(据说sql2008才有)。导出时,在页面上放一个附件下载链接,用户点连接时你从数据库字段读出二进制流把它通过Response.OutputStream输出到页面上,即可出现excel的下载保存框。

如果你需要以导入的excel数据为基础,进行更多的数据统计查询,你就必须分析设计数据库表、字段,把相应的excel单元格数据保存到数据库字段。关键是如何从web页面导入excel单元格数据、又如何把查询出来的数据放到web页面上显示成客户需要的图表?
有两种方案:
1.用Excel自动化技术。
引用Excel的类型库生成.Net的包装类。导入时采用页面放上传文件按钮的方法,在服务器端收到文件后,用excel自动化类打开excel文件,再学会VBA语法,书写大量的代码读取单元格,然后连接数据库保存。导出时,查询数据库,启动excel自动化对象,通过VBA语法填写单元格,保存成excel文件,再用Response.OutputStream输出到页面上,触发excel文件的下载保存框。缺点:容易在服务器端产生excel死进程,代码编写复杂、代码量大、还要掌握VBA语法,用户需要上传、下载操作
有人会说,显示数据时可以用网页直接显示,不用导出成excel。其实也很麻烦:用网页显示复杂的报表格式,网页设计工作量大;如果客户要求导出excel,这个工作就省不了;如果客户要求打印、打印预览、页面设置,比起excel浏览器的打印就捉襟见肘了。

2.用微软Office中间件——SOAOffice。(建议使用最新版的)
用SOAOffice输出Excel,就不会再有上述烦恼。通过SOAOffice不仅能够动态填充excel,读取excel单元格,而且还能在浏览器里直接浏览excel、或者下载、另存。SOAOffice提供标准C#.Net组件,组件在服务器端不使用自动化调用,稳定支持大量web并发访问,这是用com调用无法实现的。组件的属性方法都比较简单,易于调用,你完全不用去掌握复杂的VBA调用。

由于是纯.Net组件,所以服务器端不需安装office。 SOAOffice的excel组件SOAExcel含有Sheet、Cell等类似Excel的简化接口,调用简单。SOAExcel不但能能把数据库字段值动态填充到Excel单元格,还能把用户输入的单元格的值提出给开发者保存到数据库。
SOAExcel能够在客户端浏览器的网页里通过SOAOffice直接显示生成的Excel,用户不必先下载再打开观看内容。

举个导出excel的例子:
SOAOfficeX.ExcelResponse SOAExcel = new SOAOfficeX.ExcelResponse();
SOAOfficeX.ExcelResSheet sheet1 = SOAExcel.openSheet("Sheet1"); // 打开一个Sheet
sheet1.openCell("D"+String.valueOf(8+i)).setValue(rs.getString("Count")); //循环填充数据。
SOAOfficeX.SOAOfficeCtrl SOACtrl = new SOAOfficeX.SOAOfficeCtrl(response);
SOACtrl.assign(SOAExcel); // 绑定数据
// 打开模板并生成最终的excel报表
SOACtrl.webOpen("doc/test.xls", 1, UserName, "Excel.Sheet");

上述代码不但动态填充生成excel,而且在网页里直接显示生成的Excel给终端用户,由于使用了1打开模式,Excel是只读显示的。

读取excel单元格的代码也很简单:
SOAOfficeX.ExcelRequest SOAExcel = new SOAOfficeX.ExcelRequest();
SOAOfficeX.IExcelReqSheet sheetOrder = SOAExcel.OpenSheet("销售订单");
SOAOfficeX.IExcelReqCell cell1;
cell1 = sheetOrder.OpenCell("I5");//订单编码
string sOrderNum = cell1.Value;//cell1.Value就是读取的结果

参考资料:Asp.net下C#自动化调用Word的实例与总结

热心网友 时间:2022-05-02 15:40

你用access传到数据库很方便,EXECL复制到access一很方便,复制好数据库就有了,但要做个模板,列和数据库的对应,在access里面点打开,选择文件类型ODBC数据库(),连接到数据库,找到相应的表就可以了。最好2007版,更方便些
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
13岁一直到18岁晚上经常熬夜会有什么影响 具象表现素描内容简介 ...| 从14世纪文艺复兴到20世纪具象表现绘画 · 168幅画 · 图解西方... 【漫画赏析】比喻具象化——《孤高之人》手法分析 具象美术作品有哪些 具象艺术艺术家介绍 话说 曾经有个演唱会 是初音未来演唱会 39祭 谁知道微信聊天记录删掉了,还能恢复过来吗?有什么软件可以恢复吗?不... 六爻。测缘分。测婚姻 礼仪起源于祭祀的证据是什么? steam中的Batman: Arkham Origins和Batman: Arkham City - Game of the Year Edition有什么区别? 蝙蝠侠系列游戏应该按什么顺序玩 一种表示比赛双方打平的英语说法是什么? 请问鬼泣3最后一关但丁的话是什么意思? 鬼泣3第19关但丁和维吉尔说的话 goty edition什么意思 鬼泣3第19关的胜利台词是什么意思? 蝙蝠侠阿甘之城安装到游戏目录是什么意思?蝙蝠侠的目录在哪里?怎么复制到目录? 鬼泣1-3代的剧情 arkham knight什么意思 鬼泣3TITLE文件DEVIL MAY CRY前一句是什么 蝙蝠侠阿甘骑士batman arkham knight什么意思 鬼泣3但丁和弗吉尔在19关时干掉光头后说了什么? 谁有鬼泣完整的剧情资料??? 说点汪苏泷的故事 “vergil”什麽意思? 汪苏泷到底是满族还是汉族啊?百度百科里&quot;silence&quot;词条里说的是汉族,&quot;汪苏泷&quot;词条说的是满族,无语了&#39;&#39;&#39; 汪苏泷的经历 silence和silence.w有什么区别吗 汪苏泷的英文名是什么?还有,“歌词”这个词,翻译成英文怎么写? 飞行堡垒7的键盘灯在睡眠的时候怎么关闭 求助电脑大神、华硕笔记本电脑飞行堡垒火陨版自然休眠后,键盘光不会自动关闭,怎么设置自动关闭? 怎样消除电压力锅里的异味 如果是玻璃电饭煲就能彻底清洗干净吗?电饭煲煮泡面后总觉得味道洗不干净 荣耀x30i怎样改变按钮接电活或挂断电话 我怎么才能把泡面味道洗干净 荣耀30i怎么设置语音接听电话怎么讲? 电热锅煮面的时候有难闻的味道怎么回事? 荣耀magic3pro怎样用兰牙接听电话 华为荣耀8怎么接电话 怎么去除方便面的味道? 怎样去除泡方便面后饭盒里的异味 上海年会活动策划哪家好? 吃完泡面,饭盒里全是泡面味道,怎么祛除? 上海年会表演活动做的比较好的公司是哪家? 上海做年会策划服务的公司有经验的公司有哪些?大家帮忙推荐下! 有什么方法可以快速除去房间里的方便面味? 在杭州是否有新华保险公司? 怎样将做好的的excel文件,(很多,都是以人名命名的),导入数据库 系统重装的有哪些步骤?