使用new ActiveXObject("Excel.Application")方法将表格中数据导出到Excel时表格中的字符串值“0001”在excel中变成了1 表格中数据比较多,一个一个单元格进行toString()操作也太慢了吧?就是想通过Excel的copy命令将页面表格中的数据拷过来,可是出现了上面的问题还是一个就是编号项(如:0001)在表格中的位置是不固定的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在向Excel中写单元格时,先将单元格的格式定义为“文本”,xxx.NumberFormatLocal = "@";<HTML><HEAD><TITLE>将页面中指定表格的数据导入到Excel中</TITLE><SCRIPT LANGUAGE="javascript"> <!-- function AutomateExcel() { var oXL = new ActiveXObject("Excel.Application"); //创建应该对象 var oWB = oXL.Workbooks.Add();//新建一个Excel工作簿var oSheet = oWB.ActiveSheet;//指定要写入内容的工作表为活动工作表var table = document.all.data;//指定要写入的数据源的idvar hang = table.rows.length;//取数据源行数var lie = table.rows(0).cells.length;//取数据源列数// Add table headers going cell by cell. for (i=0;i<hang;i++){//在Excel中写行 for (j=0;j<lie;j++){//在Excel中写列 //定义格式 oSheet.Cells(i+1,j+1).NumberFormatLocal = "@"; //!!!!!!!上面这一句是将单元格的格式定义为文本 oSheet.Cells(i+1,j+1).Font.Bold = true;//加粗 oSheet.Cells(i+1,j+1).Font.Size = 10;//字体大小 oSheet.Cells(i+1,j+1).value = table.rows(i).cells(j).innerText;//向单元格写入值 } } oXL.Visible = true; oXL.UserControl = true; } //--></SCRIPT></HEAD><BODY><table border="0" width="300" id="data" bgcolor="black" cellspacing="1"> <tr bgcolor="white"> <td>编号</td> <td>姓名</td> <td>年龄</td> <td>性别</td> </tr> <tr bgcolor="white"> <td>0001</td> <td>张三</td> <td>22</td> <td>女</td> </tr> <tr bgcolor="white"> <td>0002</td> <td>李四</td> <td>23</td> <td>男</td> </tr></table><input type="button" name="out_excel" onclick="AutomateExcel();" value="导出到excel"></BODY></HTML> 上面的方法“年龄”转到excel中应该是数值型,现在却是字符串了? 呵呵 最簡單解決這個問題的方法就是吧 00001寫成 ="00001" 可以完全解決問題 在excel裡顯示的就是00001 oSheet.Cells(i+1,j+1).NumberFormatLocal = "@"; beihua(水鸟) 上面的方法“年龄”转到excel中应该是数值型,现在却是字符串了?-----------------------------------可以在循环里加上判断,指定某列为字符型,其它的仍旧保持数值型。改成:if(j==0) oSheet.Cells(i+1,j+1).NumberFormatLocal = "@"; 如果有的单元格是合并的话,上面的代码会出现“对象不存在”错误?单元格中的列数量和列名称(类型)是不确定,不好将某列固定为字符或数值类型?不知道能不能给每个单元格设置一个标签值然后再判断?还有这样输出到excel中的数据没有边框? 合并单元格这个倒从来没想过。如果每个单元格的数据类型不同的话,从数据库读数据的时候给td加个标识来区分数据类型,写入excel的时候再根据标识不同定义excel中的单元格格式。至于excel中的表格边框和定义字体一样,应该也可以定义吧具体方法,你可以参考excel中的宏:工具-->宏-->录制新宏,然后进行操作(比如给表格或单元格或行加边框),最后停止录制。用工具-->宏-->单步执行 来调出相应操作的代码,然后尝试将其转换为相应的JS代码。 合并单元格的话,估计得加上判断<tr>中的rowspan和<td>中的colspan吧。写入excel你再用录制宏看看excel中合并单元格怎么做的。 晕,太复杂了!算了,结帖吧!感谢yiran5467(依苒) Click the link to solve your problem.Good luck! js获取下拉列表框值问题 如何做到 输入网址就可以播放YOUKU\土豆、新浪的视频。。 一个insertAdjacentHTML的纠结问题 魔兽世界网站中的几个特效是怎么做的 如何用JS 编写一个 当用户输入字母时 将小写自动转成大写 如何创建自定义setInterval? 各位大哥来帮我看看,这段代码怎么不管用??? 图片的显示问题 如何在javascript中检测用户是否有按下del键? 麻烦帮我看看如何描述这个对象? 菜鸟关于隐藏table的问题 正则表达式取数字问题?
<HEAD>
<TITLE>将页面中指定表格的数据导入到Excel中</TITLE>
<SCRIPT LANGUAGE="javascript">
<!--
function AutomateExcel()
{ var oXL = new ActiveXObject("Excel.Application"); //创建应该对象
var oWB = oXL.Workbooks.Add();//新建一个Excel工作簿
var oSheet = oWB.ActiveSheet;//指定要写入内容的工作表为活动工作表
var table = document.all.data;//指定要写入的数据源的id
var hang = table.rows.length;//取数据源行数
var lie = table.rows(0).cells.length;//取数据源列数// Add table headers going cell by cell.
for (i=0;i<hang;i++){//在Excel中写行
for (j=0;j<lie;j++){//在Excel中写列
//定义格式
oSheet.Cells(i+1,j+1).NumberFormatLocal = "@";
//!!!!!!!上面这一句是将单元格的格式定义为文本
oSheet.Cells(i+1,j+1).Font.Bold = true;//加粗
oSheet.Cells(i+1,j+1).Font.Size = 10;//字体大小
oSheet.Cells(i+1,j+1).value = table.rows(i).cells(j).innerText;//向单元格写入值
}
}
oXL.Visible = true;
oXL.UserControl = true;
}
//-->
</SCRIPT>
</HEAD><BODY>
<table border="0" width="300" id="data" bgcolor="black" cellspacing="1">
<tr bgcolor="white">
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
<tr bgcolor="white">
<td>0001</td>
<td>张三</td>
<td>22</td>
<td>女</td>
</tr>
<tr bgcolor="white">
<td>0002</td>
<td>李四</td>
<td>23</td>
<td>男</td>
</tr>
</table>
<input type="button" name="out_excel" onclick="AutomateExcel();" value="导出到excel">
</BODY>
</HTML>
最簡單解決這個問題的方法就是吧 00001寫成 ="00001"
可以完全解決問題 在excel裡顯示的就是00001
上面的方法“年龄”转到excel中应该是数值型,现在却是字符串了?-----------------------------------
可以在循环里加上判断,指定某列为字符型,其它的仍旧保持数值型。
改成:
if(j==0) oSheet.Cells(i+1,j+1).NumberFormatLocal = "@";
单元格中的列数量和列名称(类型)是不确定,不好将某列固定为字符或数值类型?
不知道能不能给每个单元格设置一个标签值然后再判断?
还有这样输出到excel中的数据没有边框?
如果每个单元格的数据类型不同的话,从数据库读数据的时候给td加个标识来区分数据类型,写入excel的时候再根据标识不同定义excel中的单元格格式。至于excel中的表格边框和定义字体一样,应该也可以定义吧
具体方法,你可以参考excel中的宏:
工具-->宏-->录制新宏,然后进行操作(比如给表格或单元格或行加边框),最后停止录制。用工具-->宏-->单步执行 来调出相应操作的代码,然后尝试将其转换为相应的JS代码。