搜索
查看: 6509|回复: 19

插入图片到excel时的问题。怎么没办法绝对定位?

  [复制链接]

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
发表于 2012-6-26 13:09:32 | 显示全部楼层 |阅读模式
pdtoxls=function(){
        var excel = com.CreateObject("Excel.Application")
        excel.Visible = true; //使Excel窗口可见
        excel.alerts = true; //关闭所有操作提示
        book = excel.WorkBooks.Open( io.fullpath("\dll\exp.xls") )
        var sheet = excel.ActiveWorkbook.Sheets(1);
        pidlist=winform.checklist.text;
        pidlist=string.replace(pidlist,"\[\d+\]",'');
        sql="SELECT id,yipartsid,part,eng_unit,oe,number,eng_note,makes,pic FROM product where id in("+pidlist+") order by id limit "+start+","+pgsize;
        //io.print(sql);
        row=7;
        for id,yipartsid,part,unit,oe,number,eng_note,makes,pic in sqlConn.each(sql) {
                //excel.ActiveSheet.Range('B'+row).Select();
                img=io.fullpath('/res/pic/small/'+pic);
                io.print(img);
                sheet.Cells(row,1).Select();
                sheet.Application.ActiveWindow.Zoom = 100;
                pleft=sheet.Range('A'+row).left;
                ptop=sheet.Range('A'+row).Top;
                io.print(pleft+'|'+ptop);
                sheet.Shapes.AddPicture(img,0,-1,pleft,ptop,75.4,75.4);
                sheet.Cells(row,3).Value2=PART[part];
                sheet.Cells(row,4).Value2=oe;
                sheet.Cells(row,5).Value2=unit;
                sheet.Cells(row,6).value2 =getpdnum(id) ;
               
                //sheet.Rows(row+':'+row).
                //sheet.rows(3,3).insert();
        //        book.Selection.Insert Shift=1;
                row++;
                sheet.Range(row+':'+row).insert(_xlShiftDown);
        }
        //var path = fsys.dlg.save('EXCEL文件|*.xls|所有文件|*.*|CSV文件|*.csv','保存xls到');
    //if(path)
       // book.SaveAs(path);
        //excel.Quit(); //退出
}

这是我将产品数据插入到excel中的部分代码
sheet.Shapes.AddPicture(img,0,-1,pleft,ptop,75.4,75.4); 这个是调用excel往里面插入图片。

expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)   这是函数参考。

但是我运行了,却发现left,top,width,height 这个值传过去的值,不生效。

所以图片都无法出现在我想出现的地方。调了两天了,一直没结果。


回复

使用道具 举报

1

主题

51

帖子

636

积分

三级会员

Rank: 4

积分
636
发表于 2012-6-26 13:35:45 | 显示全部楼层

[code]sh=sheet.Pictures.Insert(img) with sh .left=sheet.Range('A'+row).left

  1. sh=sheet.Pictures.Insert(img)
  2. with sh
  3.   .left=sheet.Range('A'+row).left
  4.   .top=sheet.Range('A'+row).top
  5.   .width=sheet.Range('A'+row).width
  6.   .height=sheet.Range('A'+row).height
  7. end with
复制代码
这样试下先
回复

使用道具 举报

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2012-6-26 13:45:27 | 显示全部楼层

用这个方法不行哦,

用这个方法不行哦,
回复

使用道具 举报

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2012-6-26 13:46:21 | 显示全部楼层

我找个东西来发发图片

我找个东西来发发图片
回复

使用道具 举报

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2012-6-26 13:48:22 | 显示全部楼层

[img]http://t3.qpic.cn/mblogpic/e52ad62a3945383d2a40/2000[/img]

回复

使用道具 举报

7

主题

24

帖子

153

积分

荣誉会员

一鹤

Rank: 8Rank: 8

积分
153
QQ
发表于 2012-6-26 17:01:42 | 显示全部楼层

[code]sheet.getPictures().Insert(img)[/code]这样写就行了,遇到类似问题在前面加get作为函数调用获取属性即可.

  1. sheet.getPictures().Insert(img)
复制代码
这样写就行了,遇到类似问题在前面加get作为函数调用获取属性即可.
回复

使用道具 举报

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2012-6-26 17:15:21 | 显示全部楼层

[quote][size=2][color=#999999]Jacen 发表于 2012-6-26 17:01[/color] [url=forum.php?m

Jacen 发表于 2012-6-26 17:01
这样写就行了,遇到类似问题在前面加get作为函数调用获取属性即可.

var excel = com.CreateObject("Excel.Application")
        excel.Visible = true; //使Excel窗口可见
        excel.alerts = true; //关闭所有操作提示
        book = excel.WorkBooks.Open( io.fullpath("\dll\1.xls") )
        var sheet = excel.ActiveWorkbook.Sheets(1);
        img=io.fullpath('/dll/1.jpg');
        sh=sheet.getPictures.Insert(img);
        row=4;
        with sh{
          left=sheet.Range('A'+row).left
          top=sheet.Range('A'+row).top
          width=sheet.Range('A'+row).width
          height=sheet.Range('A'+row).height
        }

代码简化如上,执行还是提示错误:

attemp to:_get table   
kind:field(table)
name:'getpictures'
type:function

其中1.xls是空白的excel文件
回复

使用道具 举报

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2012-6-26 17:27:49 | 显示全部楼层

而且我在excel中找不到Pictures 这个属性。。 但是用宏记录出来的却是有这个值的。 Range("H20").Select Act

而且我在excel中找不到Pictures 这个属性。。
但是用宏记录出来的却是有这个值的。

Range("H20").Select
    ActiveSheet.Pictures.Insert( _
        "D:\Backup\我的文档\My Pictures\%E9%BB%84%E5%AD%90%E5%8D%8E.jpg").Select
回复

使用道具 举报

33

主题

543

帖子

3304

积分

荣誉会员

Rank: 8Rank: 8

积分
3304
发表于 2012-6-26 18:39:24 | 显示全部楼层

[quote][size=2][color=#999999]ufoweb 发表于 2012-6-26 17:15[/color] [url=forum.php?

ufoweb 发表于 2012-6-26 17:15
var excel = com.CreateObject("Excel.Application")
        excel.Visible = true; //使Excel窗口可见
        exce ...

getPictures() 是一个函数,不能省略括号。
回复

使用道具 举报

4

主题

14

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2012-6-27 09:26:18 | 显示全部楼层

[quote][size=2][color=#999999]lujjjh 发表于 2012-6-26 18:39[/color] [url=forum.php?

lujjjh 发表于 2012-6-26 18:39
getPictures() 是一个函数,不能省略括号。

终于可以了。泪流满面中~~~~这两天学了不少东西呢
回复

使用道具 举报

7

主题

305

帖子

1912

积分

新手入门

积分
1912
QQ
发表于 2012-6-28 09:27:29 | 显示全部楼层

学习了!{:)}

学习了!
每天进步一点点......
回复

使用道具 举报

77

主题

196

帖子

1134

积分

新手入门

积分
1134
发表于 2012-11-5 18:28:15 | 显示全部楼层

[i=s] 本帖最后由 charliechen 于 2012-11-5 18:33 编辑 [/i] [quote][size=2][color=#999999

本帖最后由 charliechen 于 2012-11-5 18:33 编辑
ufoweb 发表于 2012-6-27 09:26
终于可以了。泪流满面中~~~~这两天学了不少东西呢


请问为什么我运行了上面的代码后提示:
    不支持此操作:concatenate
      定义类型:self(namespace)
      名字:'row'
      类型:null
请问如果我想更改EXCEL的格子,如何用变量的方式表示格子?也就是改变‘row’。 谢谢!
好久没来了
回复

使用道具 举报

77

主题

196

帖子

1134

积分

新手入门

积分
1134
发表于 2012-11-5 18:34:24 | 显示全部楼层

[quote][size=2][color=#999999]charliechen 发表于 2012-11-5 18:28[/color] [url=forum

charliechen 发表于 2012-11-5 18:28
请问为什么我运行了上面的代码后提示:
    不支持此操作:concatenate
      定义类型:self(namesp ...

不好意思,找到答案了,原来用 var row="A6"就可以了
好久没来了
回复

使用道具 举报

1

主题

8

帖子

51

积分

一级会员

Rank: 2

积分
51
发表于 2017-10-14 14:24:15 | 显示全部楼层
本帖最后由 iroieguy 于 2017-10-14 14:28 编辑
jacen 发表于 2012-6-26 17:01
这样写就行了,遇到类似问题在前面加get作为函数调用获取属性即可.


版主,我试验了一下,执行sheet.getPictures().Insert(img),excel里只是保存了图片的绝对地址(将excel文件改名rar,解压缩可以发现里面的结构,但如果录制宏,一步一步手动点图标插入图片,就不会出现这个问题,宏里用的就是AddPicture()函数),若将excle转移到u盘里,绝对地址失效,图片就显示不出来了。
而 expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height) 函数第二、第三个参数,可以设置成保存到文档,就不会出现丢失图片的问题了,但我试了总是报错,请教该如何使用这个函数?
代码如下:
  1.         import com.excel;
  2.         var excel = com.excel(true)
  3.         excel.Visible = false;
  4.         excel.alerts = false;
  5.         book = excel.WorkBooks.Open(io.fullpath("\空白.xlsx"));  //打开空白的excel文档
  6.         sheet = book.Sheets(1)       
  7.        
  8.         sheet.Shapes.AddPicture(io.fullpath("\1.jpg"),msoFalse , msoTrue , 100, 100, 70, 70) //插入文件夹下的1.jpg图片
复制代码

------------------------------------------最后一行报错:
---------------------------
aardio:运行时错误
---------------------------
文件:[string "io.open()..."]
错误行号:#21
错误:COM exception
指定的值超出了范围。
---------------------------------------------------
调用栈:
        [kernel]: in function 'AddPicture'
        [string "io.open()..."]:21: in function 'insertPicIntoExcel'
        [string "io.open()..."]:172: in main chunk
---------------------------
确定   
---------------------------
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-14 14:29:36 | 显示全部楼层
iroieguy 发表于 2017-10-14 14:24
版主,我试验了一下,执行sheet.getPictures().Insert(img),excel里只是保存了图片的绝对地址(将exce ...

你这个msoFalse ,msoTrue是哪里来的?
如果是excel的枚举值,要写 excel.msoFalse
回复

使用道具 举报

1

主题

8

帖子

51

积分

一级会员

Rank: 2

积分
51
发表于 2017-10-14 14:36:20 | 显示全部楼层
Jacen.He 发表于 2017-10-14 14:29
你这个msoFalse ,msoTrue是哪里来的?
如果是excel的枚举值,要写 excel.msoFalse

这2个参数,我是参照这个帮助文档的,具体还不知道该怎么写,请版主指点一下,我再试试看
https://msdn.microsoft.com/zh-cn/library/aa221765(office.11).aspx
回复

使用道具 举报

1

主题

8

帖子

51

积分

一级会员

Rank: 2

积分
51
发表于 2017-10-14 14:51:26 | 显示全部楼层
Jacen.He 发表于 2017-10-14 14:29
你这个msoFalse ,msoTrue是哪里来的?
如果是excel的枚举值,要写 excel.msoFalse

我知道了,原来是参数错了,改成下面这样False和ture就行了,不过还要感谢版主神速解答!
sheet.Shapes.AddPicture(io.fullpath("\1.jpg"),False , True , 100, 100, 70, 70)
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-14 14:52:58 | 显示全部楼层
iroieguy 发表于 2017-10-14 14:51
我知道了,原来是参数错了,改成下面这样False和ture就行了,不过还要感谢版主神速解答!
sheet.Shapes. ...

你的代码我试了一下是可以的,

另外你前后写的 msoFalse ,msoTrue ,False , True 在aardio中的值都是一样的(null空值)

aardio中true,false要小写
回复

使用道具 举报

1

主题

8

帖子

51

积分

一级会员

Rank: 2

积分
51
发表于 2017-10-14 14:57:30 | 显示全部楼层
Jacen.He 发表于 2017-10-14 14:52
你的代码我试了一下是可以的,

另外你前后写的 msoFalse ,msoTrue ,False , True 在aardio中的值都 ...

哦,原来如此,我忽略了大小写, 难怪之前试来试去都报错,刚才回复时候偷懒,直接复制前面错误的帖子,删除了mso三个字,但是aardio里是自动提示更正为小写了,aardio不知不觉就帮我修改了错误,真强大!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-10-23 10:07 , Processed in 0.078125 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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