javascript
JS导出 excel
// JavaScript Document
//調用方法
//?? var test=new PageToExcel("data",0,255,"測試.xls");//table id , 第幾行開始,最后一行顏色 ,保存的文件名
//?? test.CreateExcel(false);
//?? test.Exec();
//?? test.SaveAs();
//?? test.CloseExcel();
//LastRowColor 0黑色 255紅色
//
function PageToExcel(TableID,FirstRow,LastRowColor,SaveAsName){
this.lastRowColor=LastRowColor==""?0:LastRowColor;
var today=new Date();
this.saveAsName=(SaveAsName==""?today.getYear()+"年"+(today.getMonth()+1)+"月"+today.getDate()+"日.xls":SaveAsName);
this.tableId=TableID;
this.table=document.getElementById(this.tableId);//導出的table 對象
this.rows=this.table.rows.length;//導出的table總行數(shù)
this.colSumCols=this.table.rows(0).cells.length;//第一行總列數(shù)
this.fromrow=FirstRow;
this.beginCol=0; //起始列數(shù)
this.cols=this.colSumCols;
this.oXL=null;
this.oWB=null;
this.oSheet=null;
this.rowSpans=1; //行合并
??? this.colSpans=1; //列合并
??? this.colsName={0:"A",1:"B", 2:"C", 3:"D", 4:"E", 5:"F", 6:"G", 7:"H", 8:"I",9:"J", 10:"K", 11:"L", 12:"M", 13:"N", 14:"O", 15:"P", 16:"Q", 16:"R" ,18:"S", 19:"T", 20:"U", 21:"V", 22:"W", 23:"X", 24:"Y", 25:"Z"};
}
PageToExcel.prototype.DeleteExcelCols=function(NotShowColList){//數(shù)組NotShowColList
??? //this.notShowColList=NotShowColList;//不顯示列集合,1,2,3,1
??? //刪除excel中的列
?? var m=0;
?? for(var i=0;i<NotShowColList.length;i++){
???????? if(i>0){
??????????? m++;
???????? }
??????? var temp=NotShowColList[i]- m;
??????? var index=this.colsName[temp];
?? this.oSheet.Columns(index).Delete;//刪除
?? }
?? m=0;
}
???
PageToExcel.prototype.CreateExcel=function(ExcelVisible)
{
?? try{
?? this.oXL = new ActiveXObject("Excel.Application"); //創(chuàng)建應該對象
?? this.oXL.Visible = ExcelVisible;
?? this.oWB = this.oXL .Workbooks.Add();//新建一個Excel工作簿
??? this.oSheet = this.oWB.ActiveSheet;//指定要寫入內容的工作表為活動工作表
?? //不顯示網(wǎng)格線
?? this.oXL.ActiveWindow.DisplayGridlines=false;
?? }catch(e){
??? alert("請確認安裝了非綠色版本的excel!"+e.description);
??? CloseExcel();
?? }
}
PageToExcel.prototype.CloseExcel=function()
{
??? this.oXL.DisplayAlerts = false;??
??????????? this.oXL.Quit();??
??????????? this.oXL = null;??
??????????? this.oWB=null;??
??????????? this.oSheet=null;
}
PageToExcel.prototype.ChangeElementToLabel=function (ElementObj){
?? var GetText="";
?? try{
?? var childres=ElementObj.childNodes;
??
?? }catch(e){ return GetText}
?? if(childres.length<=0) return GetText;
?? for(var i=0;i<childres.length;i++){
?? try{if(childres[i].style.display=="none"||childres[i].type.toLowerCase()=="hidden"){continue;}}
?? catch(e){}
????
???? try{
????? switch (childres[i].nodeName.toLowerCase()){
??????? case "#text" :
???????? GetText +=childres[i].nodeValue ;
???????? break;
??????? case "br" :
???????? GetText +="\n";
???????? break;
??????? case "img" :
???????? GetText +="";
???????? break;
??????? case "select" :
???????? GetText +=childres[i].options[childres[i].selectedIndex].innerText ;
???????? break;
??????? case "input" :
???????? if(childres[i].type.toLowerCase()=="submit"||childres[i].type.toLowerCase()=="button"){
????????? GetText +="";
???????? }else if(childres[i].type.toLowerCase()=="textarea"){
????????? GetText +=childres[i].innerText;
???????? }else{
????????? GetText +=childres[i].value;
???????? }
???????? break;
??????? default :
???????? GetText += this.ChangeElementToLabel(childres[i]);
???????? break;
????? }
?????
???? }catch(e){}
?? }
?? return GetText;
}
PageToExcel.prototype.SaveAs=function (){
?? //保存
?? try{
??? this.oXL.Visible =true;
??? var fname = this.oXL.Application.GetSaveAsFilename(this.saveAsName, "Excel Spreadsheets (*.xls), *.xls");
??? if(fname){
??? this.oWB.SaveAs(fname);
???? this.oXL.Visible =false;
??? }
?? }catch(e){};
}
PageToExcel.prototype.Exec=function()
{
??
?? //尋找列數(shù),考慮到第一行可能存在
?? for (var i=0; i<this.colSumCols;i++) {
??? var tmpcolspan = this.table.rows(0).cells(i).colSpan;
??? if ( tmpcolspan>1 ) {
???? this.cols += tmpcolspan-1;
??? }
?? }
??
?? //定義2維容器數(shù)據(jù),1:行;2:列;值(0 可以填充,1 已被填充)
?? var container=new Array(this.rows);
?? for (var i=0;i<this.rows;i++) {
??? container[i]=new Array(this.cols);
??? for (j=0;j<this.cols;j++) {
???? container[i][j]=0;
??? }
?? }
??
?? //將所有單元置為文本,避免非數(shù)字列被自動變成科學計數(shù)法和丟失前綴的0
?? this.oSheet.Range(this.oSheet.Cells(this.fromrow+1,1), this.oSheet.Cells(this.fromrow+this.rows,this.cols)).NumberFormat = "@";
?? // 循環(huán)行
?? for (i=0;i<this.rows;i++){
??? //循環(huán)列
??? for (j=0;j<this.cols;j++){
???? //尋找開始列
???? for (k=j;k<this.cols;k++){
????? if (container[i][k]==0) {
?????? this.beginCol=k;
?????? k=this.cols; //退出循環(huán)
????? }
???? }
//try{
????? //賦值
????? //此處相應跟改 根據(jù) 標簽的類型,替換相關參數(shù)
????? this.oSheet.Cells(i+1+this.fromrow,this.beginCol+1).value = this.ChangeElementToLabel(this.table.rows(i).cells(j));
?????
???
????? //計算合并列
????? try{
???? this.colSpans = this.table.rows(i).cells(j).colSpan;
????? }catch(e){
???? this.colSpans=0??
???? }
???? if (this.colSpans>1) {
????? //合并
????? this.oSheet.Range(this.oSheet.Cells(i+1+this.fromrow,this.beginCol+1),this.oSheet.Cells(i+1+this.fromrow,this.beginCol+this.colSpans)).Merge();
???? }
???? //將當前table位置填寫到對應的容器中
???? for (k=0; k<this.colSpans;k++) {
????? container[i][this.beginCol+k]= 1;
???? }
???? // 計算合并行
????
???? try{
????? this.rowSpans = this.table.rows(i).cells(j).rowSpan;
?????? }catch(e){
?????? this.rowSpans = 0;
???? }
????
???? if (this.rowSpans>1) { //行合并
????? this.oSheet.Range(this.oSheet.Cells(i+1+this.fromrow,this.beginCol+1),this.oSheet.Cells(i+this.rowSpans+this.fromrow,this.beginCol+this.colSpans)).Merge();
????? //將當前table位置填寫到對應的容器中
????? for (k=1; k<this.rowSpans;k++) { //由于第0行已經(jīng)被colSpans對應的代碼填充了,故這里從第1行開始
?????? for (l=0;l<this.colSpans;l++) {
??????? container[i+k][this.beginCol+l]=1;
?????? }
????? }
???? }
???? //如果開始列+合并列已經(jīng)等于列數(shù)了,故不需要再循環(huán)html table
???? if (this.beginCol+this.colSpans>=this.cols) j=this.cols;
???
??? }
??? if(i==0)
??? {
???? //標題欄
???? this.oSheet.Range(this.oSheet.Cells(1,1), this.oSheet.Cells(1,1)).Font.Size=20;
???? this.oSheet.Range(this.oSheet.Cells(1,1), this.oSheet.Cells(1,1)).Font.Bold = true;
???? this.oSheet.Range(this.oSheet.Cells(1,1), this.oSheet.Cells(1,1)).HorizontalAlignment = -4108; //居中
???? this.oSheet.Range(this.oSheet.Cells(1,1), this.oSheet.Cells(1,1)).Rows.RowHeight = 40;
??? }
???? //自動調整行高
?? }
??
??
?? //最后一行是否空色
?? try{
??? this.oSheet.Range(this.oSheet.Cells(this.rows,1), this.oSheet.Cells(this.rows,1)).Font.Color=this.lastRowColor;
?? }catch(e){}
?? this.oSheet.Range(this.oSheet.Cells(this.fromrow+2,1), this.oSheet.Cells(this.fromrow+this.rows,this.cols)).Rows.RowHeight=20;
?? this.oSheet.Range(this.oSheet.Cells(this.fromrow+2,1), this.oSheet.Cells(this.fromrow+this.rows,this.cols)).Font.Size=10;
?? //自動換行
?? this.oSheet.Range(this.oSheet.Cells(this.fromrow+2,1), this.oSheet.Cells(this.fromrow+this.rows,this.cols)).WrapText = true;
?? //自動調整列寬
?? this.oSheet.Range(this.oSheet.Cells(this.fromrow+1,1), this.oSheet.Cells(this.fromrow+this.rows,this.cols)).Columns.AutoFit();
?? //點虛線
?? this.oSheet.Range(this.oSheet.Cells(this.fromrow+1,1), this.oSheet.Cells(this.fromrow+this.rows,this.cols)).Borders.LineStyle = -4118;
??
????
?? return this.rows;
}
總結
以上是生活随笔為你收集整理的JS导出 excel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP浏览网页
- 下一篇: SAP标准成本核算重要环节详解