技术要点:
1:要打印的区域以一个id划分出来
2:引入js文件,调用方法
3:js文件的写法:
function equMyApplyedDetail(tableid) {
var oXL = new ActiveXObject("Excel.Application"); //创建应该对象
var oWB = oXL.Workbooks.Add();//新建一个Excel工作簿
var oSheet = oWB.ActiveSheet;//指定要写入内容的工作表为活动工作表
var table = document.getElementById(tableid);//注意这里是table的名字或是ID
var rows = table.rows.length;
var colSumCols = table.rows(0).cells.length;
var beginCol = 0;
var cols = colSumCols;
var rowSpans=1; //行合并
var colSpans=1; //列合并
//寻找列数,考虑到第一行可能存在合并
for (var i=0; i<colSumCols;i++) {
var tmpcolspan = table.rows(0).cells(i).colSpan;
if ( tmpcolspan>1 ) {
cols += tmpcolspan-1;
}
}
//定义2维容器数据,1:行;2:列;值(0 可以填充,1 已被填充)
var container=new Array(rows);
for (var i=0;i<rows;i++) {
container[i]=new Array(cols);
for (j=0;j<cols;j++) {
container[i][j]=0;
}
}
//将所有单元置为文本,避免非数字列被自动变成科学计数法和丢失前缀的0
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(rows,cols)).NumberFormat = "@";
oXL.Visible = true;
// Add table headers going cell by cell.
for (i=0;i<rows;i++){
for (j=0;j<cols;j++){
//寻找开始列
for (k=j;k<cols;k++){
if (container[i][k]==0) {
beginCol=k;
k=cols; //退出循环
}
}
//赋值
oSheet.Cells(i+1,beginCol+1).value = table.rows(i).cells(j).innerText;
colSpans = table.rows(i).cells(j).colSpan;
if (colSpans>1) {
//合并
oSheet.Range(oSheet.Cells(i+1,beginCol+1), oSheet.Cells(i+1,beginCol+colSpans)).Merge();
}
//将当前table位置填写到对应的容器中
for (k=0; k<colSpans;k++) {
container[i][beginCol+k]= 1;
}
rowSpans = table.rows(i).cells(j).rowSpan;
if (rowSpans>1) { //行合并
oSheet.Range(oSheet.Cells(i+1,beginCol+1), oSheet.Cells(i+rowSpans,beginCol+colSpans)).Merge();
//将当前table位置填写到对应的容器中
for (k=1; k<rowSpans;k++) { //由于第0行已经被colSpans对应的代码填充了,故这里从第1行开始
for (l=0;l<colSpans;l++) {
container[i+k][beginCol+l]=1;
}
}
}
//如果开始列+合并列已经等于列数了,故不需要再循环html table
if (beginCol+colSpans>=cols) j=cols;
}
}
//字符大小为13
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(rows,cols)).Font.Size=13;
//居中效果
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(rows,cols)).HorizontalAlignment = 3;
oSheet.Range(oSheet.Cells(2,1), oSheet.Cells(2,1)).HorizontalAlignment = 1;
oSheet.Range(oSheet.Cells(3,1), oSheet.Cells(3,1)).HorizontalAlignment = 1;
oSheet.Range(oSheet.Cells(5,7), oSheet.Cells(rows,7)).HorizontalAlignment = 1;
//标题加粗效果
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,1)).Font.Size=18;
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,1)).Font.Bold = true;
//自动调整列宽
oSheet.Range(oSheet.Cells(3,2), oSheet.Cells(rows,cols)).Columns.ColumnWidth = 25;
oSheet.Range(oSheet.Cells(4,7), oSheet.Cells(rows,7)).Columns.ColumnWidth = 45;
//设置单元格内容自动换行
oSheet.Range(oSheet.Cells(4,1), oSheet.Cells(rows,cols)).WrapText = true;
//自动调整行高
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,1)).Rows.RowHeight = 45;
oSheet.Range(oSheet.Cells(2,1), oSheet.Cells(2,1)).Rows.RowHeight = 20;
oSheet.Range(oSheet.Cells(3,1), oSheet.Cells(3,1)).Rows.RowHeight = 20;
//划边框(第一行不要)
oSheet.Range(oSheet.Cells(4,1), oSheet.Cells(rows,cols)).Borders.LineStyle =1;
//调整页面的位置
}
以上的注释大部分够用了,如果还有特殊需求,百度很多