ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4135|回复: 5

用.net 在程序中填充word表格 速度为什么那么慢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-2-22 15:12 | 显示全部楼层 |阅读模式
下面是我写的代码.可是运行的时候速度慢的无法忍受。要是有几百条线段估计要20多分钟; int numRows = numLsegs; int numCols = 6; object [,] data = new object[ numRows, numCols ]; FillTableData(out numCols, out numRows, out data); object start = 0 ; object end = wDoc.Characters.Count ; Word.Range range = wDoc.Range(ref start ,ref end); object defaultTableBehavior = true; object autoFitBehavior = true; Word.Table table = wDoc.Tables.Add(range,numRows,numCols,ref defaultTableBehavior,ref autoFitBehavior); table.Cell( row, 1).Range.Text = "线段编号"; table.Cell( row, 2).Range.Text = "端点x1"; table.Cell( row, 3).Range.Text = "端点y1"; table.Cell( row, 4).Range.Text = "端点x2"; table.Cell( row, 5).Range.Text = "端点y2"; table.Cell( row, 6).Range.Text = "长度l"; for (int r = 1; r <= numRows; r++) { for (int c = 1; c <= numCols; c++) { table.Cell(r, c).Range.Text = (string)data[r - 1, c - 1]; } } 试了各种方法都很慢 恳请这里的高手指点一下
[此贴子已经被作者于2006-2-22 15:17:39编辑过]

TA的精华主题

TA的得分主题

发表于 2006-2-22 16:05 | 显示全部楼层
可以以TAB(chr(9))为分隔符,连接数据,如果你的数据是在数组中,直接以JOIN函数用CHR(9)连接起来,在内存中写到字符串变量中,最后写入WORD文档中,再将此内容以制表位为分隔符,文本转为表格。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-22 22:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

[求助]

我还是没弄明白怎么把数组中的数据填充到表格中去,比如说有100条线段。 那么问题就是将二维数组data[100,6]中的数据填充到一个100行 6列的表格中去; (可能有空数据) 版主的方法是将所有的数据用tab分割后连成一个大字符串;然后写入word文件中; 但怎么最后形成表格还是弄不明白。 能不能给点具体的代码说明一下。初学VBA对很多接口和函数都不了解,请多指教一下。

TA的精华主题

TA的得分主题

发表于 2006-2-23 05:23 | 显示全部楼层
以下是引用[I]xuff[/I]在2006-2-22 22:04:13的发言:[BR] 我还是没弄明白怎么把数组中的数据填充到表格中去,比如说有100条线段。 那么问题就是将二维数组data[100,6]中的数据填充到一个100行 6列的表格中去; (可能有空数据) 版主的方法是将所有的数据用tab分割后连成一个大字符串;然后写入word文件中; 但怎么最后形成表格还是弄不明白。 能不能给点具体的代码说明一下。初学VBA对很多接口和函数都不了解,请多指教一下。
'* +++++++++++++++++++++++++++++ '* Created By I LOVE YOU WORD!@ExcelHome 2006-2-23 5:24:23 '仅测试于System: Windows NT Word: 11.0 Language: 2052 '№ 0019^The Code CopyIn [ThisDocument-ThisDocument]^' '* ----------------------------- Option Explicit Sub Example() Dim myArray(0 To 99) As String, myString As String Dim M As Byte, myRange As Range, myTable As Table Dim N As Byte, myArray2(0 To 99, 0 To 5) As String Application.ScreenUpdating = False '一维数组 ' For M = 0 To 99 ' myArray(M) = M ' Next ' myString = VBA.Join(myArray, Chr(9)) '二维数组 '生成一个二维数组 myString = "" For N = 0 To 5 For M = 0 To 99 myArray2(M, N) = N & M Next Next '将二组数组中的数据写到字符串变量中,并以Tab键分隔 For N = 0 To 5 For M = 0 To 99 myString = myString & myArray2(M, N) & vbTab Next Next '去掉最后一个Tab键 myString = VBA.Left(myString, Len(myString) - 1) '在字符串首加入字段名 myString = "线段编号" & vbTab & myString myString = "端点x1" & vbTab & myString myString = "端点y1" & vbTab & myString myString = "端点x2" & vbTab & myString myString = "端点y2" & vbTab & myString myString = "长度l" & vbTab & myString With ActiveDocument '定义一个RANGE对象为文档末位置 Set myRange = .Range(.Content.End - 1, .Content.End - 1) myRange.InsertAfter myString '插入字符串 '以制表位为分隔符,分隔生成一个6列101行的表格 Set myTable = myRange.ConvertToTable(Separator:=wdSeparateByTabs, numrows:=101, numcolumns:=6) '设置表格样式 myTable.Style = "网格型" End With Application.ScreenUpdating = True '恢复屏幕更新 End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-23 17:32 | 显示全部楼层
非常感谢版主,问题终于解决了。终于不用再看动画了。

TA的精华主题

TA的得分主题

发表于 2006-2-23 17:45 | 显示全部楼层
学习了,明白了为什么:我在竞赛区的速度没有Sialog兄快的原因,先写入文字,再转化,比一个一个填快多了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 07:54 , Processed in 0.030967 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表