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导出:
public bool OnBeforeBrowse(IWebBrowser browser, IRequest request, NavigationType naigationvType, bool isRedirect)
{
if (url.Contains("application/vnd.ms-excel;base64"))
{
string tmpContent = url;//获取传递上来的文件内容
string contentHead = "data:application/vnd.ms-excel;base64,";
int startIndex = tmpContent.IndexOf(contentHead);
int name_StartIndex = tmpContent.IndexOf(contentHead) + contentHead.Length;
int name_EndIndex = tmpContent.IndexOf('#');
string fileName = "Excel表格";
if (name_EndIndex != -)
{
fileName = Uri.UnescapeDataString(tmpContent.Substring(name_StartIndex, name_EndIndex - name_StartIndex));
tmpContent = tmpContent.Substring(name_EndIndex + );
}
else
{
tmpContent = tmpContent.Substring(name_StartIndex);
}
byte[] output = Convert.FromBase64String(tmpContent);
SaveFileDialog dialog = new SaveFileDialog();
dialog.FileName = fileName+".xls";
dialog.Filter = "(Excel文件)|*.xls";
DialogResult result = dialog.ShowDialog();
if (result == DialogResult.OK)
{
using (FileStream fs = new FileStream(dialog.FileName, FileMode.Create, FileAccess.Write))
{
fs.Write(output, , output.Length);
fs.Flush();
}
return true;
}
}
return false;
}
使得该功能能够正常实现。如果你有更好的实现方式,欢迎一起交流!!
CefSharp中实现Chrome中jS导出Excel的更多相关文章
- chrome浏览器js 导出excel
<table id="table"> <tr> <th>ID</th> <th>姓名</th> <th ...
- [置顶] Jsp中的table多表头导出excel文件
首先引入两份JS:copyhtmltoexcel.js以及 tableToExcel.js /* * 默认转换实现函数,如果需要其他功能,需自行扩展 * 参数: * tableID : HTML中Ta ...
- JS导出excel设置下载的标题/与angular结合冲突
2017.8更新 此功能与angular结合使用时,最后一行 document.getElementById("dlink").click(); 与angular的ng-click ...
- js导出excel
function inportEx() { $("#btnEx").text("导出中..."); var fugNumber = "";/ ...
- js导出Excel表格
js导出Excel表格 直接上代码: 红色部分:如果表格数据中有“1/1”这样的值,会在导出的Excel中转化为日期“1月1日”,所以才加上了红色那两句.如果返回值中没有这样的格式,红色部分可以不写. ...
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...
- EasyUI 如何结合JS导出Excel文件
出处:http://blog.csdn.net/jumtre/article/details/41119991 EasyUI 如何结合JS导出Excel文件 分类: 技术 Javascript jQu ...
- [转]tableExport.js 导出excel 如果有负数或是空值 导出前面会自动加上单引号
原文地址:https://blog.csdn.net/private66/article/details/88718285 tableExport.js 导出excel 如果有负数或是空值 导出前 ...
- 利用PHPExcel导出excel 以及利用js导出excel
导出excel的方法output_excel需要依赖PHPExcel 导出csv的方法csv_export不需要 <?php /** * @author ttt */ class ExcelCo ...
- 浏览器端JS导出EXCEL
浏览器端JS导出EXCEL FileSaver.js 实现了在本身不支持 HTML5 W3C saveAs() FileSaver 接口的浏览器支持文件保存.FileSaver.js 在客户端保存文件 ...
随机推荐
- 一步步学习ASP.NET MVC3 (11)——@Ajax,JavaScriptResult(2)
请注明转载地址:http://www.cnblogs.com/arhat 今天在补一章吧,由于明天的事可能比较多,老魏可能顾不上了,所以今天就再加把劲在写一章吧.否则对不起大家了,大家看的比较快,可是 ...
- iOS8中的UIActionSheet添加UIDatePicker后,UIDatePicker不显示问题
解决方法: IOS8以前: UIActionSheet* startsheet = [[UIActionSheet alloc] initWithTitle:title delegate:self ...
- SVN服务器使用(二)
上篇主要介绍的VisualSVN Server 安装,这篇主要介绍VisualSVN Server 的使用. 首先打开VisualSVN Server Manager,如图: 可以在窗口的右边看到版本 ...
- makefile懒人版(单个文件编译)
.PHONY:clean all CC=gcc CFLAGS=-Wall -g ###replace your bin BIN=1 2 3 4 all:$(BIN) %.o:%.c $(CC) $(C ...
- HAProxy 的负载均衡服务器,Redis 的缓存服务器
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...
- bin(x) 将整数x转换为二进制字符串
>>> a 122 >>> b 344 >>> c = bin(a) >>> d = bin(b) >>> c ...
- Win7 & Win 8系统更新失败的解决
转自:Win 8系统更新失败的解决(原创) 这几天win 8又出了一大堆更新,而且是一更新完就要重启,重启之后照例要进入更新包的安装过程.不爽的是,屡屡在重启后出现"配置Windows更新失 ...
- 【官方文档】《暗黑世界V1.4》API说明!
指令号说明 账号注册 100 { username str 用户名 password str 密码 } 返回信息 { result bool 指令调用是否成功 ...
- ASP.NET生命周期详解
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- 一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
一个字 word 是16位, 一个字由两个字节组成 , 字节=byte,,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit kbyte= k*byte