关于设置colgroup后table表导入excel,怎么样让隐藏的东西不导入excel中【附图和代码看问题】

lfywy 2008-10-28 04:57:17
首先我是设置表的显示列名,如下图:

设置好后报表如下:

导入EXCEL:

结果没选中的列也被导入EXCEL中,如下图:

设置列的代码是改变如下:(colgroup来实现的,我也是试过了,反正是隐藏属性的导入EXCEL都显示出来了!但我要的是所见即所得的!)

<table id="PT" cellspacing="0" cellpadding="0" width="100%" border="1" bordercolorlight="#B6B6B6" bordercolordark="#FFFFFF" style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none;">
<colgroup id="ColSelected">
<col id="col1">
<col id="col2">
<col id="col3">
<col id="col4">
<col id="col5">
<col id="col6">
<col id="col7">
<col id="col8">
<col id="col9">
<col id="col10">
<col id="col11">
<col id="col12">
<col id="col13">
<col id="col14">
<col id="col15">
<col id="col16">
<col id="col17">
<col id="col18">
<col id="col19">
<col id="col20">
<col id="col21">
<col id="col22">
<col id="col23">
<col id="col24">
<col id="col25">
<col id="col26">
<col id="col27">
<col id="col28">
<col id="col29">
</colgroup>
.......//根据col列ID来实现隐藏显示列名

导入EXCEL代码如下:

function AutomateExcel()
{
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
var sel=document.body.createTextRange();
sel.moveToElementText(tid1);
sel.select();
sel.execCommand("Copy");
oSheet.Paste();
oXL.Visible =true;
oXL=null;
sel.execCommand("Unselect");
}

我估计是导入EXCEL的代码里应该运用tid1属性的样式代码,有了这个应该就可以了,不过我在网上找了半天也没有这方面的资料,很少的colgroup资料,都是基本的!望高手出手相助!不甚感激!

完全解决给分100,其余当酌情给提示或帮忙顶贴的!谢谢!特此声明!
...全文
734 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
imudaiyu 2008-11-16
  • 打赏
  • 举报
回复
我也现在也到这个问题了。当导出的数据量达到2万到3万行时,ie基本就挂了。更别说作判断,去掉隐藏列了。
还有就是数据达到3万行时,隐藏一列数据,ie就基本不行了。郁闷阿!
希望众高手指点一下!万分感激!!!
lfywy 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 xusanling 的回复:]
只能默默的顶一下.
[/Quote]
为何??
xusanling 2008-11-05
  • 打赏
  • 举报
回复
只能默默的顶一下.
lfywy 2008-10-31
  • 打赏
  • 举报
回复
提供的思路不错,我试试
lifuyun 2008-10-31
  • 打赏
  • 举报
回复
这样你的表的样式也在,隐藏的列就不在了,就实现了所见即所得了!
主要是把隐藏的列去掉,重新建立一个和之前表一样的样式,然后用你的导入EXCEL的方法导入你新建的表,基本这些步骤都可以用JS实现,很简单!不过自己要建立一个搜索隐藏列的算法!好好想想了
lifuyun 2008-10-31
  • 打赏
  • 举报
回复
思路有了,第一根据colgroup可以知道哪些列被隐藏了,重新写一个带有id的table如NewTableId如下:

<table id="NewTableId" cellpadding="0" cellspacing="0" width="200%" border="0"><tr><td>
<table id="TT" cellspacing="0" cellpadding="0" width="100%" border="0" bordercolorlight="#B6B6B6" bordercolordark="#FFFFFF" style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none;">
<tr id="tt-1">
<td rowspan="4" style="width:15%;"> </td>
<td rowspan="4" colspan="16" align="right" style="width:70%;font-size: 24px; font-weight: bold;">2008年10月飞行监测城镇污水厂进、出水主要污染物浓度一览表</td>
</tr>
<tr id="tt0"><td> </td><td colspan="7"> </td><td colspan="7"> </td><td align="right"> </td>
<td align="right">单位:除含水率、色度、排污量、泥样、采样日期外均为mg/L</td></tr>
</table>
<table id="PT" cellspacing="0" cellpadding="0" width="100%" border="1" bordercolorlight="#B6B6B6" bordercolordark="#FFFFFF" style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none;">
<colgroup id="ColSelected">
<col id="col1">
<col id="col2">
<col id="col3">
<col id="col4">
<col id="col5">
<col id="col6">
<col id="col7">
<col id="col8">
<col id="col9">
<col id="col10">
<col id="col11">
<col id="col12">
<col id="col13">
<col id="col14">
<col id="col15">
<col id="col16">
<col id="col17">
<col id="col18">
<col id="col19">
<col id="col20">
<col id="col21">
<col id="col22">
<col id="col23">
<col id="col24">
<col id="col25">
<col id="col26">
<col id="col27">
<col id="col28">
<col id="col29">
</colgroup>
<tr align="center" id="tt1" bgcolor="#D4D4D4"><td rowspan="2" style="font-weight: bold;width:1%;">区域</td><td rowspan="2" style="font-weight: bold;">序号</td><td rowspan="2" style="font-weight: bold;">单位名称</td><td colspan="2" style="font-weight: bold;">BOD5</td><td colspan="2" style="font-weight: bold;">SS</td><td colspan="2" style="font-weight: bold;">CODcr</td><td colspan="2" style="font-weight: bold;">NH3-N</td><td colspan="2" style="font-weight: bold;">TP</td><td colspan="2" style="font-weight: bold;">PH</td><td colspan="2" style="font-weight: bold;">氨氮</td><td colspan="2" style="font-weight: bold;">总磷</td><td colspan="2" style="font-weight: bold;">总氮</td><td colspan="2" style="font-weight: bold;">色度(倍)</td><td rowspan="2" style="width:6%;: 宋体, 新宋体;font-weight: bold;">脱水污泥含水率(%)</td><td rowspan="2" style="width:6%;: 宋体, 新宋体;font-weight: bold;">排污量</td><td rowspan="2" style="width:6%;: 宋体, 新宋体;font-weight: bold;">泥样</td></tr>
<tr align="center" id="tt2" bgcolor="#D4D4D4"><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td><td style="font-weight: bold;">进水</td><td style="font-weight: bold;">出水</td></tr>
//此处需要判断的地方---
</table>


the_table="上面的字符串";
function exp_tab(the_table)
{
var the_content="";
document.onclick();
the_content=the_table;
var newwin=window.open("about:blank","_blank","");
newwin.document.open();
newwin.document.write(the_content);
newwin.document.close();
newwin=null;
}
function AutomateExcel()
{
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
var sel=document.body.createTextRange();
sel.moveToElementText(NewTableId);
sel.select();
sel.execCommand("Copy");
oSheet.Paste();
oXL.Visible =true;
oXL=null;
sel.execCommand("Unselect");
}
exp_tab(the_table);
AutomateExcel();
window.close();

这样就OK了!
lfywy 2008-10-31
  • 打赏
  • 举报
回复
up
rczjp 2008-10-31
  • 打赏
  • 举报
回复
来顶下 捞个分呵呵
jms918 2008-10-30
  • 打赏
  • 举报
回复
up
lfywy 2008-10-30
  • 打赏
  • 举报
回复
up
lfywy 2008-10-30
  • 打赏
  • 举报
回复
今日请教
lfywy 2008-10-29
  • 打赏
  • 举报
回复
up
lfywy 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 yfqvip 的回复:]
引用 21 楼 lfywy 的回复:
你之前说的我都可以用,你的说不错【导出是根据XML标记来的】,明说了我就是要这个o(∩_∩)o...

我猜你的意思是要设置个属性之类的,如果是隐藏的列,那么就不导出,呵呵,这样的属性是没有的,要自己判断。
还有另外一种思路,通过查询语句生成DataSet来实现,结合CarlosAg.ExcelXmlWriter.dll使用起来还是挺方便的,不过这种是后台实现的。
[/Quote]
哎......没办法!不过你提的都不错,我会仔细考虑的!还是十分感谢!

[Quote=引用 25 楼 sxmonsy 的回复:]
没用过colgroup,顶一下LZ可以吗.我记得在这里初见LZ的时候LZ还是一个小三角呢.现在已经四个了呀,成长的真快.
[/Quote]
呵呵......我做软件是在06年,不过上CSDN是07年,以前是http://blog.csdn.net/lifuyun这个号,但是由于种种原因,我又申请了这个lfywy号了,其实成长与不成长和CSDN是没关系的,分高就说明成长了?只能说在CSDN里成长了不少分,关键的是技术的成长!和朋友之间交流成长自己的见识!不过以前经常由于工作繁忙,比较少地上而也,现在发现可能遇到我要的问题和我要问的问题解决方案,所以最近来的比较频繁了!也就是你所谓的成长了!
sxmonsy 2008-10-29
  • 打赏
  • 举报
回复
没用过colgroup,顶一下LZ可以吗.我记得在这里初见LZ的时候LZ还是一个小三角呢.现在已经四个了呀,成长的真快.
满衣兄 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lfywy 的回复:]
你之前说的我都可以用,你的说不错【导出是根据XML标记来的】,明说了我就是要这个o(∩_∩)o...
[/Quote]
我猜你的意思是要设置个属性之类的,如果是隐藏的列,那么就不导出,呵呵,这样的属性是没有的,要自己判断。
还有另外一种思路,通过查询语句生成DataSet来实现,结合CarlosAg.ExcelXmlWriter.dll使用起来还是挺方便的,不过这种是后台实现的。
lfywy 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lfywy 的回复:]
引用 20 楼 yfqvip 的回复:
引用 18 楼 lfywy 的回复:
即使有,这个判断也是封装在JS写的方法里的。

你之前说的我都可以用,你的说不错【导出是根据XML标记来的】,明说了我就是要这个o(∩_∩)o...
[/Quote]
你之前说的我都可以用,而且我都会用!^_^
满衣兄 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lfywy 的回复:]
如果可以把表的样式直接引入到EXCEL里实现,那不是更好吗?
[/Quote]
一样的啊,在哪实现都要做这个判断。
另外,使用COLGROUP只会增加EXCEL中的标记个数,
需要注意的是尽量减少导出到EXCEL中的标记个数,否则会导致excel体积庞大,这对大数据量导出是很明显的,通常体积会增大一倍以上。
lfywy 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 yfqvip 的回复:]
引用 18 楼 lfywy 的回复:
即使有,这个判断也是封装在JS写的方法里的。
[/Quote]
你之前说的我都可以用,你的说不错【导出是根据XML标记来的】,明说了我就是要这个o(∩_∩)o...
满衣兄 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lfywy 的回复:]
怎么样把需要的所见即所得的table样式直接插入EXCEL,这样就省的所有的判断,又方便!我主要是想得到这样的解法!
[/Quote]
首先要明白这个导出是根据XML标记来的,但是从你的图片上看,你的html代码根据隐藏列的方式实现定制表格的,也就是说虽然有的列没有显示,但是在HTML代码里是存在这个隐藏表列的HTML代码的。所以这个判断是必要的,这样就是实现所见所得,没有你说的那种不用判断就可以实现的,即使有,这个判断也是封装在JS写的方法里的。
lfywy 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yfqvip 的回复:]
我做了一点修改,LZ请看:

HTML code
<HTML>
<HEAD>
<title>WEB页面导出为EXCEL文档的方法 </title>
</HEAD>
<body>
<BR>
<table id="PrintA" width="100%" border="1" cellspacing="0" cellpadding="0" bgcolor="#61FF13">
<TR style="text-align : center;">
<TD style="display:none">单元格A1</TD>
<TD>单元格A2</TD>

[/Quote]
我是根据colgroup来控制列隐藏的[我在提问的时候说到:设置列的代码是改变如下:(colgroup来实现的,我也是试过了,反正是隐藏属性的导入EXCEL都显示出来了!但我要的是所见即所得的!) ],具体的我需要去测试好后给你回复!不过我更需要在十八楼提到的,如果可以把表的样式直接引入到EXCEL里实现,那不是更好吗?【需要这样的方便方法,就像我隐藏列一样直接用COLGROUP来控制,省得你每个地方来display:none;的话,很麻烦的,大家可以去试试看看我说的简便方法,但是网上提到colgroup使用和细节反而比较少】
加载更多回复(19)

62,068

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧