JS Excel读取和写入操作(模板操作)实现代码


Posted in Javascript onApril 11, 2010

本人是在实际项目中摸索出,JS读写Excel(模板)数据,包括怎么用JS把图片插入Excel中。
首先,添加一个公用的模板地址JS,如下:
AddZDaddress.js

/////////////////////////////////////////////////////////////////////////////////////////////////// 
////DocName:信任站点地址添加--AddZDaddress.js 
////Author:lify 
////Company:Wavenet 
////Date:2009-11-04 
////EditDate:2010-03-11 
////MainContent:Findings,Ajax And So On; 
////////////////////////////////////////////////////////////////////////////////////////////////// 
var BelieveAddress='172.18.1.25/psc1';////配置地址配置程序时需要的配置地址 
////**********************************Excel 导入到WEB界面模板地址集合*******************************************// 
//////////////////////////飞行检测excel模板地址配置///////////////////////////////////////////////////////////// 
var template_path_FxjcExcelDatasIntoSqlDatas = "http://%22+believeaddress+%22/NewReports/xls_template/飞行检测城镇污水厂进出水主要污染物浓度.xls"; 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
////***********************************************************************************************************// 
////*********************************Excel 录入模板导入地址集合**********************************************// 
//////////////////////////月报导入excel地址配置////////////////////////////////// 
var template_path_month = "http://%22+believeaddress+%22/NewReports/xls_template/上海市污水处理企业生产运行表.xls"; 
///////////////////////////////////////////////////////////////////////////////// 
//////////////////////////年报导入excel地址配置////////////////////////////////// 
var template_path_year = "http://%22+believeaddress+%22/NewReports/xls_template/上海市污水处理设施信息表.xls"; 
////*********************************************************************************************************// 
//图片地址 
var pic_path="http://%22+believeaddress+%22/NewReports/"; 
/////////////////////////////////////////////////////////////////////////////////

再次,怎么样把页面数据读取到Excel中JS,如下:
YearReportLuRu.jsYearReportLuRu.js
////DocName:污水处理设施信息表(年报)-录入报表--YearReportLuRu.js 
////Author:lify 
////Company:Wavenet 
////Date:2009-08-14 
////EditDate:2009-08-14 
////MainContent:Findings,Ajax And So On; 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
///////////////////////////////////////添加正则表达式类///////////////////////////////////////////////////////////// 
document.write("<script language=\"javascript\" type=\"text/javascript\" src=\"js/RegularExpression.js\"><\/script>"); 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
function AutomateExcel3() 
{ 
//alert(pic_path+document.getElementById("ImgUrl").value);//测试 
var xls = new ActiveXObject("Excel.Application"); 
xls.Visible = true; 
var newBook = xls.Workbooks.Open(template_path_year);//这里的Add方法里的参数是模板的路径 
var oSheet=newBook.ActiveSheet; 
////////////////////////////////////////////写入数据到模板中//////////////////////////////////////////////////////////// 
///////////////法人单位名称///////////////////////////////////////////////////////////////////////////////////////////// 
oSheet.Cells(2,3).value = Trim(PT.rows[0].cells[1].innerText); 
///////////////法人单位代码以及代表姓名///////////////////////////////////////////////////////////////////////////////////////////////// 
oSheet.Cells(2,9).value = Trim(PT.rows[0].cells[3].innerText); 
oSheet.Cells(2,13).value = Trim(PT.rows[0].cells[5].innerText); 
//////////////进出口三张表///////////////////////////////////////////////////////////////////////////////////////// 
oSheet.Cells(3,2).value=Trim(PT.rows[1].cells[1].innerText); 
oSheet.Cells(3,6).value=Trim(PT.rows[1].cells[3].innerText); 
oSheet.Cells(3,8).value=Trim(PT.rows[1].cells[5].innerText); 
oSheet.Cells(3,10).value=Trim(PT.rows[1].cells[7].innerText); 
oSheet.Cells(3,13).value=Trim(PT.rows[1].cells[9].innerText); 
oSheet.Cells(4,2).value=Trim(PT.rows[2].cells[1].innerText); 
oSheet.Cells(4,4).value=Trim(PT.rows[2].cells[3].innerText); 
oSheet.Cells(4,6).value=Trim(PT.rows[2].cells[5].innerText); 
oSheet.Cells(4,8).value=Trim(PT.rows[2].cells[7].innerText); 
oSheet.Cells(4,10).value=Trim(PT.rows[2].cells[9].innerText); 
oSheet.Cells(4,12).value=Trim(PT.rows[2].cells[11].innerText); 
oSheet.Cells(4,14).value=Trim(PT.rows[2].cells[13].innerText); 
oSheet.Cells(5,2).value=Trim(PT.rows[3].cells[1].innerText); 
oSheet.Cells(5,5).value=Trim(PT.rows[3].cells[3].innerText); 
oSheet.Cells(5,8).value=Trim(PT.rows[3].cells[5].innerText); 
oSheet.Cells(5,10).value=Trim(PT.rows[3].cells[7].innerText); 
oSheet.Cells(5,12).value=Trim(PT.rows[3].cells[9].innerText); 
oSheet.Cells(5,14).value=Trim(PT.rows[3].cells[11].innerText); 
//////////////年运行简况/////////////////////// 
oSheet.Cells(6,4).value = Trim(PT.rows[4].cells[3].innerText); 
oSheet.Cells(6,6).value = Trim(PT.rows[4].cells[5].innerText); 
oSheet.Cells(6,8).value = Trim(PT.rows[4].cells[7].innerText); 
oSheet.Cells(6,10).value = Trim(PT.rows[4].cells[9].innerText); 
oSheet.Cells(6,12).value = Trim(PT.rows[4].cells[11].innerText); 
oSheet.Cells(6,14).value = Trim(PT.rows[4].cells[13].innerText); 
oSheet.Cells(7,4).value = Trim(PT.rows[5].cells[2].innerText); 
oSheet.Cells(7,6).value = Trim(PT.rows[5].cells[4].innerText); 
oSheet.Cells(7,8).value = Trim(PT.rows[5].cells[6].innerText); 
oSheet.Cells(7,10).value = Trim(PT.rows[5].cells[8].innerText); 
oSheet.Cells(7,12).value = Trim(PT.rows[5].cells[10].innerText); 
oSheet.Cells(7,14).value = Trim(PT.rows[5].cells[12].innerText); 
//////////////年处理水量/////////////////////// 
oSheet.Cells(8,2).value = Trim(PT.rows[6].cells[1].innerText); 
oSheet.Cells(8,5).value = Trim(PT.rows[6].cells[3].innerText); 
oSheet.Cells(8,8).value = Trim(PT.rows[6].cells[5].innerText); 
oSheet.Cells(8,11).value = Trim(PT.rows[6].cells[7].innerText); 
oSheet.Cells(8,14).value = Trim(PT.rows[6].cells[9].innerText); 
//////////////污水厂工艺概况/////////////////////// 
oSheet.Cells(10,3).value = Trim(PT.rows[8].cells[1].innerText); 
oSheet.Cells(10,4).value = Trim(PT.rows[8].cells[2].innerText); 
oSheet.Cells(10,5).value = Trim(PT.rows[8].cells[3].innerText); 
oSheet.Cells(10,7).value = Trim(PT.rows[8].cells[4].innerText); 
oSheet.Cells(11,3).value = Trim(PT.rows[9].cells[1].innerText); 
oSheet.Cells(11,4).value = Trim(PT.rows[9].cells[2].innerText); 
oSheet.Cells(11,5).value = Trim(PT.rows[9].cells[3].innerText); 
oSheet.Cells(11,7).value = Trim(PT.rows[9].cells[4].innerText); 
oSheet.Cells(12,3).value = Trim(PT.rows[10].cells[1].innerText); 
oSheet.Cells(12,4).value = Trim(PT.rows[10].cells[2].innerText); 
oSheet.Cells(12,5).value = Trim(PT.rows[10].cells[3].innerText); 
oSheet.Cells(12,7).value = Trim(PT.rows[10].cells[4].innerText); 
//--------------------------运行费用分析-------------------------------------// 
oSheet.Cells(13,3).value = Trim(PT.rows[11].cells[2].innerText); 
oSheet.Cells(13,5).value = Trim(PT.rows[11].cells[4].innerText); 
oSheet.Cells(13,7).value = Trim(PT.rows[11].cells[6].innerText); 
oSheet.Cells(13,9).value = Trim(PT.rows[11].cells[8].innerText); 
////////////////////////////////厂外输送泵站示意图//////////////////////////// 
//copy(document.getElementById("ImgUrl")); 
//oSheet.Pictures.Insert(pic_path+document.getElementById("ImgUrl").value);///////.Cells(13,11) 
var msoShaoeRectangle = 1;//AddShape(透明度,左,上,宽度,高度) 
oSheet.Shapes.AddShape(msoShaoeRectangle, 560, 330, 200, 150).Fill.UserPicture(pic_path+document.getElementById("ImgUrl").value); 
//oSheet.Cell(13,11).select();//选中excel的单元格 
//oSheet.Pictures.Insert(PT.rows[11].cells[8].getElementById("ImgUrl").src); 
////////////////////////////////////////////////////////////////////////////// 
oSheet.Cells(14,3).value = Trim(PT.rows[12].cells[1].innerText); 
oSheet.Cells(14,5).value = Trim(PT.rows[12].cells[3].innerText); 
oSheet.Cells(14,7).value = Trim(PT.rows[12].cells[5].innerText); 
oSheet.Cells(14,9).value = Trim(PT.rows[12].cells[7].innerText); 
oSheet.Cells(15,3).value = Trim(PT.rows[13].cells[1].innerText); 
oSheet.Cells(15,5).value = Trim(PT.rows[13].cells[3].innerText); 
oSheet.Cells(15,7).value = Trim(PT.rows[13].cells[5].innerText); 
oSheet.Cells(15,9).value = Trim(PT.rows[13].cells[7].innerText); 
oSheet.Cells(16,5).value = Trim(PT.rows[14].cells[1].innerText); 
oSheet.Cells(16,7).value = Trim(PT.rows[14].cells[3].innerText); 
oSheet.Cells(16,9).value = Trim(PT.rows[14].cells[5].innerText); 
oSheet.Cells(17,3).value = Trim(PT.rows[15].cells[1].innerText); 
oSheet.Cells(17,5).value = Trim(PT.rows[15].cells[3].innerText); 
oSheet.Cells(17,7).value = Trim(PT.rows[15].cells[5].innerText); 
//---------------------------------------------------------------------------// 
//////////////污水厂表下方信息/////////////////////// 
oSheet.Cells(18,2).value = Trim(RT.rows[0].cells[1].innerText); 
oSheet.Cells(18,7).value = Trim(RT.rows[0].cells[3].innerText); 
oSheet.Cells(18,11).value = Trim(RT.rows[0].cells[5].innerText); 
oSheet.Cells(18,14).value = Trim(RT.rows[0].cells[7].innerText); 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
xls.Visible = true; 
xls.UserControl = true; 
xls = null; 
idTmr = window.setInterval("Cleanup();",1); 
//xls.quit(); 
} 
function Cleanup() 
{ 
window.clearInterval(idTmr); 
CollectGarbage(); 
} 
function copy(tabid){ 
var oControlRange = document.body.createControlRange(); 
oControlRange.add(tabid,0); 
oControlRange.select(); 
document.execCommand("Copy"); 
}

最后,如何读取到Excel模板中数据到页面上共客户编辑数据再保存到数据库中(此步可以用xml发送至后台交互,在此不进一步说明)JS,如下:
Fxjc_ExcelDatasIntoSqlDatas.js
////DocName:导入模板数据功能--Fxjc_ExcelDatasIntoSqlDatas.js 
////Author:lify 
////Company:Wavenet 
////Date:2010-03-12 
////EditDate:2010-03-12 
////MainContent:Findings,Ajax And So On; 
////////////////////////////////////////////////////////////////////////////////////////////////// 
var excelFileName=""; //本地EXCEL地址 
var oWB; 
var idTmr=""; 
function AutomateExcel3() 
{ 
//删除PT表的除前2行的所有行 
DeleteTablePT(); 
//alert(pic_path+document.getElementById("ImgUrl").value);//测试 
var xls=null; 
var newBook; 
try{ 
xls = new ActiveXObject("Excel.Application"); 
}catch(e){openBg(0);openTS(0); 
alert("请您打开ActiveX控件,具体操作:单击IE中的“工具”里“Internet 选项”,单击“安全”中的“自定义级别”中“ActiveX控件和插件”中,请选择第三项为启用即可。详细错误:"+e.message); 
return ; 
} 
if (xls == null){openBg(0);openTS(0); 
alert("创建Excel文件失败,可能是您的计算机上没有正确安装Microsoft Office Excel软件或浏览器的安全级别设置过高!"); 
return; 
} 
try{ 
newBook = xls.Workbooks.Open(excelFileName);//这里的Add方法里的参数是模板的路径 
}catch(e){openBg(0);openTS(0); 
alert("加载的Excel文件路径有错误!详细:"+e.message); 
return ; 
} 
var oSheet=newBook.ActiveSheet; 
////////////////////////////////////////////模板写入数据到WEB页面中//////////////////////////////////////////////////////////// 
var xhnum=0; 
//alert("oSheet.Cells(3,18).value="+oSheet.Cells(3,18).value+"|"+(oSheet.Cells(3,5).value=="<30")+"|oSheet.Cells(3,20).value="+oSheet.Cells(3,20).value); 
for(var i=3;i<108;i++) 
{ 
if(oSheet.Cells(i,1).value) 
{ 
xhnum++; 
var newRow = document.getElementById("PT").insertRow(-1); 
var newCell; 
newRow.align = "center"; 
newRow.height = "35px"; 
for(var j=0;j<28;j++) 
{ 
if(j==4) 
{ 
//什么都不做 
} 
else if(j<4) 
{ 
newCell = newRow.insertCell(j); 
if(j==0) newCell.innerHTML = (xhnum).toString();//序号 
else if(j==1) 
{ 
if(!oSheet.Cells(i,1).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,1).value=="——"||oSheet.Cells(i,1).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,1).value==""?" ":oSheet.Cells(i,1).value); 
} 
else if(j==2) 
{ 
if(!oSheet.Cells(i,2).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,2).value=="——"||oSheet.Cells(i,2).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,2).value==""?" ":oSheet.Cells(i,2).value); 
//newCell.innerHTML = (oSheet.Cells(i,2).value==""?" ":oSheet.Cells(i,2).value); 
} 
else if(j==3) 
{ 
if(!oSheet.Cells(i,4).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,4).value=="——"||oSheet.Cells(i,4).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,4).value==""?" ":oSheet.Cells(i,4).value); 
//newCell.innerHTML = (oSheet.Cells(i,4).value==""?" ":oSheet.Cells(i,4).value); 
} 
else if(j==9) 
{ 
if(!oSheet.Cells(i,j+1).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,j+1).value=="<30") 
newCell.innerHTML = "30"; 
else if(oSheet.Cells(i,j+1).value=="——"||oSheet.Cells(i,j+1).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,j+1).value==""?" ":oSheet.Cells(i,j+1).value); 
} 
else 
{ 
if(!oSheet.Cells(i,j+1).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,j+1).value=="<30") 
newCell.innerHTML = "30"; 
else if(oSheet.Cells(i,j+1).value=="<DL") 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,j+1).value=="——"||oSheet.Cells(i,j+1).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,j+1).value==""?" ":oSheet.Cells(i,j+1).value); 
} 
} 
else 
{ 
newCell = newRow.insertCell(j-1);//少一个就可以了,少样品编号插入 
if(j==0) newCell.innerHTML = (xhnum).toString();//序号 
else if(j==1) 
{ 
if(!oSheet.Cells(i,1).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,1).value=="——"||oSheet.Cells(i,1).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,1).value==""?" ":oSheet.Cells(i,1).value); 
} 
else if(j==2) 
{ 
if(!oSheet.Cells(i,2).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,2).value=="——"||oSheet.Cells(i,2).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,2).value==""?" ":oSheet.Cells(i,2).value); 
//newCell.innerHTML = (oSheet.Cells(i,2).value==""?" ":oSheet.Cells(i,2).value); 
} 
else if(j==3) 
{ 
if(!oSheet.Cells(i,4).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,4).value=="——"||oSheet.Cells(i,4).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,4).value==""?" ":oSheet.Cells(i,4).value); 
//newCell.innerHTML = (oSheet.Cells(i,4).value==""?" ":oSheet.Cells(i,4).value); 
} 
else if(j==9) 
{ 
if(!oSheet.Cells(i,j+1).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,j+1).value=="<30") 
newCell.innerHTML = "30"; 
else if(oSheet.Cells(i,j+1).value=="——"||oSheet.Cells(i,j+1).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,j+1).value==""?" ":oSheet.Cells(i,j+1).value); 
} 
else 
{ 
if(!oSheet.Cells(i,j+1).value) 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,j+1).value=="<30") 
newCell.innerHTML = "30"; 
else if(oSheet.Cells(i,j+1).value=="<DL") 
newCell.innerHTML = " "; 
else if(oSheet.Cells(i,j+1).value=="——"||oSheet.Cells(i,j+1).value=="--") 
newCell.innerHTML = " "; 
else 
newCell.innerHTML = (oSheet.Cells(i,j+1).value==""?" ":oSheet.Cells(i,j+1).value); 
} 
} 
} 
} 
} 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
newBook.Close(); 
newBook=null; 
xls = null; 
openBg(0);openTS(0); 
///////////////////////////////开启编辑和保存按钮功能/////////////////////////////////// 
OnOrOffBtn(1); 
//////////////////////////////////////////////////////////////////////////////////////// 
idTmr = window.setInterval("Cleanup();",1); 
////////////////////////////////表格数字和字符转化////////////////////////////////////// 
TableIntoDatas();////表格数字和字符转化 
//////////////////////////////////////////////////////////////////////////////////////// 
}

其实做报表很痛苦,但是从中也能经历不少。很高兴以此文章让那些报表高手前来指导和拍砖。谢谢了!
以上为针对excel模板总结的一些方法,欢迎各位前来拍砖!也欢迎大家来交流交流!
Javascript 相关文章推荐
Javascript的IE和Firefox兼容性汇编
Jul 01 Javascript
(JS实现)MapBar中坐标的加密和解密的脚本
May 16 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
Nov 20 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 Javascript
老生常谈ES6中的类
Jul 31 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
vue实现同时设置多个倒计时
May 20 Vue.js
一个js的tab切换效果代码[代码分离]
Apr 11 #Javascript
YUI的Tab切换实现代码
Apr 11 #Javascript
利用JS重写Cognos右键菜单的实现代码
Apr 11 #Javascript
可以将word转成html的js代码
Apr 11 #Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 #Javascript
jquery 模拟雅虎首页的点击对话框效果
Apr 11 #Javascript
url 编码 js url传参中文乱码解决方案
Apr 11 #Javascript
You might like
php之字符串变相相减的代码
2007/03/19 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
Python代码调试的几种方法总结
2015/04/15 Python
python变量不能以数字打头详解
2016/07/06 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
python文件路径操作方法总结
2020/12/21 Python
职业女性的职业规划
2014/03/04 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL