搜索
查看: 2930|回复: 7

excel中,一块区域直接赋值给数组,出现空值,求高人解答

[复制链接]

3

主题

58

帖子

585

积分

荣誉会员

Rank: 8Rank: 8

积分
585
发表于 2016-5-28 02:24:03 | 显示全部楼层 |阅读模式
本帖最后由 vqimwr 于 2016-5-28 15:56 编辑

问题如题,见如下代码:

  1. //com.excel库范例
  2. import console;
  3. import com.excel;

  4. console.log("正在启动excel")
  5. var excel;
  6. try {
  7.         excel = com.excel()
  8. }
  9. if( !excel ) error("该示例需要安装EXCEL",2)

  10. excel.Visible = true; //使Excel窗口可见
  11. excel.alerts = true; //打开操作提示,看excel内容。


  12. var book = excel.WorkBooks.Add() //创建工作簿
  13. // book = excel.Open( "\test.xls" )
  14.   
  15. var sheet = excel.ActiveWorkbook.Sheets(1);

  16. var n=10
  17. for(i=1;n;1){
  18.         for(j=1;n;1){
  19.                 sheet.cells(i,j).value2=i/j+i*j+i+j;       
  20.         }
  21. }


  22. console.log("第J列数据,逐格提取数据:")
  23. //遍列所有单元格
  24. for(i,values in excel.eachValue(1) ){
  25.         console.log("行号"+i,values[n])  
  26. }


  27. var arrTemp=sheet.range(sheet.cells(1,10),sheet.cells(10,10)).value();//sheet.range().value表示函数,后面必须加()后的sheet.range().value()才是结果,在本例里是2维数组。
  28. console.log("第J列数据,2维数组内容:")
  29. console.dump(arrTemp);//***************问题来了,2维数组为什么间隔有空值??***************。

  30. import table;
  31. var arr={};//把2维数组转1维数组!!!
  32. for(i=1;n;1){
  33.         table.push(arr,arrTemp[i][1]);
  34. }
  35. console.log("第J列数据,1维数组内容:")
  36. console.dump(arr);


  37. excel.Quit(); //退出
  38. console.pause();
复制代码
回复

使用道具 举报

3

主题

58

帖子

585

积分

荣誉会员

Rank: 8Rank: 8

积分
585
 楼主| 发表于 2016-5-28 02:30:14 | 显示全部楼层

[i=s] 本帖最后由 vqimwr 于 2016-5-28 15:56 编辑 [/i] 区域赋值给数值对大量数值操作时,可以提高速度。 出来的2维数组

本帖最后由 vqimwr 于 2016-5-28 15:56 编辑

区域赋值给数值对大量数值操作时,可以提高速度。

出来的2维数组一个有值间隔一个空值,研究了两天都没有搞懂。求助,感谢!
回复

使用道具 举报

3

主题

58

帖子

585

积分

荣誉会员

Rank: 8Rank: 8

积分
585
 楼主| 发表于 2016-5-28 15:54:43 | 显示全部楼层

[i=s] 本帖最后由 vqimwr 于 2016-5-28 21:07 编辑 [/i] 我回来了。 代码删了点不要的。见下面。 经测试,发现一个很诡异的

本帖最后由 vqimwr 于 2016-5-28 21:07 编辑

我回来了。
代码删了点不要的。见下面。
经测试,发现一个很诡异的现象,当n为奇数时,数组连续,当n为偶数时,则数值和空值间隔出现!!!
无法理解啊!!

  1. //com.excel库范例
  2. import console;
  3. import com.excel;

  4. console.log("正在启动excel")
  5. var excel;
  6. try {
  7.         excel = com.excel()
  8. }
  9. if( !excel ) error("该示例需要安装EXCEL",2)

  10. excel.Visible = true; //使Excel窗口可见
  11. excel.alerts = true; //打开操作提示,看excel内容。


  12. var book = excel.WorkBooks.Add() //创建工作簿
  13. // book = excel.Open( "\test.xls" )
  14.   
  15. var sheet = excel.ActiveWorkbook.Sheets(1);

  16. var n=5//n改成偶数就出问题了
  17. for(i=1;n;1){
  18.         for(j=1;n;1){
  19.                 sheet.cells(i,j).value2=i/j+i*j+i+j;       
  20.         }
  21. }


  22. console.log("第n列数据,逐格提取数据:")
  23. //遍列所有单元格
  24. for(i,values in excel.eachValue(1) ){
  25.         console.log("行号"+i,values[n])  
  26. }

  27. //下面是区域整体赋值给生成2维数组。可用range().value2或者range().value()。
  28. //var arrTemp=sheet.range(sheet.cells(1,n),sheet.cells(n,n)).value;//错误,arrTemp是函数。
  29. //var arrTemp=sheet.range(sheet.cells(1,n),sheet.cells(n,n)).value();//正确,arrTemp是2维数组。
  30. var arrTemp=sheet.range(sheet.cells(1,n),sheet.cells(n,n)).value2;//正确,arrTemp是2维数组。
  31. //var arrTemp=sheet.range("j1:j10").value2;//正确,arrTemp是2维数组

  32. console.log("第n列数据,2维数组内容:")
  33. console.dump(arrTemp);//
  34. excel.Quit(); //退出
  35. console.pause();
复制代码
回复

使用道具 举报

3

主题

58

帖子

585

积分

荣誉会员

Rank: 8Rank: 8

积分
585
 楼主| 发表于 2016-5-30 09:50:33 | 显示全部楼层

上面的代码不是全的,只是表示一下我的问题而已

上面的代码不是全的,只是表示一下我的问题而已。
excel矩形区域直接赋值生成2维数组是一个很重要的方法,速度很快的。比逐格遍历快得多了。
之所以不用数据库,是因为程序中还有一些数据库不能进行的操作,比如图表等。。。
回复

使用道具 举报

15

主题

66

帖子

390

积分

二级会员

Rank: 3Rank: 3

积分
390
发表于 2017-10-9 19:07:48 | 显示全部楼层
我也碰到同样的问题,楼主把问题解决了吗?
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-10-10 02:17:03 | 显示全部楼层
abbasky 发表于 2017-10-9 19:07
我也碰到同样的问题,楼主把问题解决了吗?

这个是BUG,新版已修正。
回复

使用道具 举报

15

主题

66

帖子

390

积分

二级会员

Rank: 3Rank: 3

积分
390
发表于 2017-10-10 08:44:00 | 显示全部楼层
Jacen.He:
版主,这速度太赞了,非常感谢!
回复

使用道具 举报

3

主题

58

帖子

585

积分

荣誉会员

Rank: 8Rank: 8

积分
585
 楼主| 发表于 2017-10-26 13:33:41 | 显示全部楼层
谢谢。。Jacen.He
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-11 20:24 , Processed in 0.078133 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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