CefSharp中实现Chrome中jS导出Excel

【前言】

 在博客园闲逛了一年多,平时都是借鉴别人的成功经验,总觉得自己应该分享点什么,但是苦于自己技术有限,平时又不爱写东西,所以一直没有写过任何东西。毕业一年多,在现实工作中遇到各种问题,深切体会到遇到问题时的焦急与纠结。今天决定写自己的第一篇现实中遇到的问题。希望能够为遇到类似问题的博友们提供一些帮助。文章可能写的不好,请勿喷!! 

【背景】

使用JS将<table>数据以Excel形式已经不是新鲜事情,在IE中常常使用ActiveXObject来创建Excel.application对象来处理。但是Chrome里面并不支持创建ActiveXObject对象方式来进行处理,所以有人在Chrome里面使用某种JS来进行处理导出页面table数据,具体方式见山维空间博客

【环境】

先说一下自己参与项目的背景,项目架构是采B/S和C/S的混合架构。业务实现是Java实现,可以通过浏览器访问,但是有一部分功能必须使用.Net实现。所以又采用.Net来做客户端,在客户端中使用内嵌浏览器的方式来实现整体功能。开始客户端使用过webBrowser来作为内嵌浏览器,但是说实话,IE的东西性能太差,兼容性又不好。所以最后决定使用webKit内核的浏览器。最后选择了cefSharp .

【遇到问题】

  如果读者没有看山维空间博客的空间,建议先看完该博客再继续看下面。

使用博客中提到的JS实现方式,在Chrome能够实现将页面<table>表格数据以Excel形式导出。但是在CefSharp里面却没有任何反应。跟踪调试发现JS已经执行location.href = uri + base64(template(tables));执行完成后没有任何操作。CefSharp中只能执行到RequestHandler控制类的 OnBeforeResourceLoad方法执行完成就结束。

具体原因未知。

【解决】

查看OnBeforeResourceLoad方法的requestResponse参数能够找到URL就是我们最后传递的数据。最后做了如下操作使得问题解决.

实现OnBeforeBrowse方法,在该方法中做Excel导出:

 1  public bool OnBeforeBrowse(IWebBrowser browser, IRequest request, NavigationType naigationvType, bool isRedirect)
 2         {
 3               if (url.Contains("application/vnd.ms-excel;base64"))
 4             {
 5                 string tmpContent = url;//获取传递上来的文件内容
 6                 string contentHead = "data:application/vnd.ms-excel;base64,";
 7                 int startIndex = tmpContent.IndexOf(contentHead);
 8                 int name_StartIndex = tmpContent.IndexOf(contentHead) + contentHead.Length;
 9                 int name_EndIndex = tmpContent.IndexOf(‘#‘);
10                 string fileName = "Excel表格";
11                 if (name_EndIndex != -1)
12                 {
13                     fileName = Uri.UnescapeDataString(tmpContent.Substring(name_StartIndex, name_EndIndex - name_StartIndex));
14                     tmpContent = tmpContent.Substring(name_EndIndex + 1);
15                 }
16                 else
17                 {
18                     tmpContent = tmpContent.Substring(name_StartIndex);
19                 }
20                 byte[] output = Convert.FromBase64String(tmpContent);
21                 SaveFileDialog dialog = new SaveFileDialog();
22                 dialog.FileName = fileName+".xls";
23                 dialog.Filter = "(Excel文件)|*.xls";
24                 DialogResult result = dialog.ShowDialog();
25                 if (result == DialogResult.OK)
26                 {
27                     using (FileStream fs = new FileStream(dialog.FileName, FileMode.Create, FileAccess.Write))
28                     {
29                         fs.Write(output, 0, output.Length);
30                         fs.Flush();
31                     }
32                     return true;
33                 }
34             }
35             return false;
36         }

使得该功能能够正常实现。如果你有更好的实现方式,欢迎一起交流!!

CefSharp中实现Chrome中jS导出Excel

时间: 2024-10-14 00:54:16

CefSharp中实现Chrome中jS导出Excel的相关文章

chrome浏览器js 导出excel

1 <table id="table"> 2 <tr> 3 <th>ID</th> 4 <th>姓名</th> 5 <th>年龄</th> 6 <th>职业</th> 7 <th>地区</th> 8 <th>邮箱</th> 9 </tr> 10 <tr> 11 <td>1</td

js导出excel

function inportEx() { $("#btnEx").text("导出中..."); var fugNumber = "";//第几次随访 var fugid = "";//随访组Id var fudid = "";//医生id var zTree = $.fn.zTree.getZTreeObj("tree"); var nodes = zTree.getSelected

浏览器端JS导出EXCEL

很多表格业务需要将表格数据导出为Excel,通常使用后台语言java或者php实现数据查询组织Excel文件,提供下载.如果使用客户端JS导出Excel的话,可以减轻服务器端的运算压力,并且能够快速响应. 早期浏览器端导出excel都是借助IE的ActiveX,需要调整浏览器的安全级别,且只能再IE浏览器下使用.我们需要一种跨平台的解决方案. 而Flash具有强大的客户端处理能力,其FileReference类可以从浏览器向本地存储数据.随着Html5的发展,File API也支持浏览器读写本地

js导出excel增加表头、mso-number-format定义数据格式

问题1:增加表头 js导出表格时,只会导出table里的展现出的内容,如需增加表头等内容需要在页面获取的字符串中拼接表头的相关字符串,详细介绍如下: tableString:新增的表头内容字符串: ctx.table: 新增的表头+页面获取的table字符串. 这样,表头就加上了,还可以通过style设置它的样式: 问题2:mso-number-format定义数据格式 在做项目时遇到mso-number-format定义的科学计数法转化格式与金额定义的向右对齐样式有冲突.  之前有写过篇博客专

js 导出Excel

最近从Silverlight这边转到javascript过来,现在要导出一个导出excel的功能.上级领导指示当页显示多少数据,就导出多少数据,没有必要从后台在去数据.以前也没有接触过这方面的,在网上一整狂查资料,最终决定采用excel2003xml+flash插件实现改功能. 获取excel2003xml格式 在桌面新建一个excel文件,另存为2003xml格式,用Vs2012打开该文件,就能清晰的明白数据保存方式. javascript构造xml数据 了解数据结构后,我们已经知道了exce

使用JSExcelXML.js导出Excel模板

     老规矩先来个预览图 业务系统显示效果图 导出模板图 功能描述    世间万物总是相生相克,既然我们的客户要求有导出Excel,当然也会提导人Excel,那么问题就来了,我们的业务系统怎么知道用户提供的数据会是怎样的呢,那么用户需要的数据模板就应运而生了,在JSExcelXmL的最新版本中提供模板生成功能. var tmpdlg = $.ExportExcelTmp({options }); tmpdlg.ExportExcelTmp('open'); 2.参数说明 { SheetNam

js导出excel:前端当前数据的导出

网上找的库文件,同样做了修改.在导出的时候,有时候数据第一列和最后一列可能是复选框和操作按钮,这个是我们不需要的,加了这个的过滤 //table2excel.js /* * jQuery table2excel - v1.1.1 * jQuery plugin to export an .xls file in browser from an HTML table * https://github.com/rainabba/jquery-table2excel * * Made by raina

XLSX.js 导出Excel demo

GitHub:https://github.com/SheetJS/js-xlsx 一个js操作Excel的工具,如下代码,很方便的就将json数据导出为Excel文件. 使用示例: //json 数据 var data = [{ "a": 1, "x": 2, "b": 3, "y": 4, "success":true }, { "a": 1, "x": 2, &

023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)

我们要实现的效果: 进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格. 点击"导出"之后: 点击下载就能下载Excel表格,实现导出功能. 讲解如下: 还是分为三层: 1:Dao层 我们先看sql语句. 在PL/SQL写sql: select id, bm, mc, jx, gg, zhxs, scqymc, spmc,jyzt, zbjg, (select info from dictinfo wher