搜索
查看: 2621|回复: 5

从LISTVIEW 导出到EXCEL

[复制链接]

77

主题

196

帖子

1134

积分

新手入门

积分
1134
发表于 2018-4-20 10:41:51 | 显示全部楼层 |阅读模式
50专家分
我做了一个程序将LISTVIEW导出到一个已有的EXCEL里,要求不改变EXCEL表格的行高,宽度,以及颜色。只需要将LISTVIEW的内容填入EXCEL中就好。
我的代码如下:
import win.ui;
import fsys
import com
import process
/*DSG{{*/
mainForm = win.form(text="aardio form";right=410;bottom=619)
mainForm.add(
button={cls="button";text="导出到EXCEL";left=151;top=549;right=260;bottom=589;z=3};
button2={cls="button";text="关闭";left=277;top=548;right=386;bottom=588;z=4};
listview={cls="listview";left=20;top=66;right=388;bottom=518;bgcolor=16777215;edge=1;font=LOGFONT(h=-13;weight=700);fullRow=1;gridLines=1;hscroll=1;vscroll=1;z=1};
static={cls="static";text="欢迎!";left=25;top=19;right=379;bottom=58;font=LOGFONT(h=-24;weight=700);transparent=1;z=2}
)
/*}}*/

mainForm.listview.insertColumn("名称",70)         
mainForm.listview.insertColumn("性别",50)
mainForm.listview.insertColumn("年龄",50)
mainForm.listview.insertColumn("手机",200)

mainForm.listview.addItem({"张三";"男";"28";"124 2346 1234"})
mainForm.listview.addItem({"李哲思";"男";"23";"123 2346 1267"})
mainForm.listview.addItem({"王金";"男";"29";"136 2111 1234"})
mainForm.listview.addItem({"柯伟平";"男";"3";"1344 2556 1034"})
mainForm.listview.addItem({"立马";"男";"25";"124 2326 1235"})
mainForm.listview.addItem({"吴金凤";"女";"22";"127 2006 1124"})
mainForm.listview.addItem({"张玲玲";"女";"27";"124 2355 5554"})

mainForm.button2.oncommand = function(id,event){//关闭窗体
        mainForm.close()
}

mainForm.button.oncommand = function(id,event){//从LISTVIEW导出到EXCEL
    mainForm.static.text="正在导出数据,请耐心等待!"
    fsys.createDir("\res")
        path=fsys.getCurDir()
        exce1=com.CreateObject("Excel.Application");
    var book = exce1.WorkBooks.Open( path+"\res\Data.xlsx")
    exce1.visible=ture;
    exce1.DisplayAlerts = False;
    sheet1 = book.sheets(1);
    sheet1.UsedRange.clear()//清楚表格中旧的数据
    for i=1;mainForm.listview.count;1{//将LISTVIEW中相应的数据赋值给EXCEL的对应格子
                      for t=1;mainForm.listview.columnCount;1{
                          sheet1.Cells(i+3,t).value2=mainForm.listview.getItemText(i,t)
                          }
                      }
     exce1.ActiveWorkbook.Save();
     exce1.ActiveWorkbook.close();
     mainForm.static.text="数据已经成功导出到EXEL表格!"
     process.explore(path+"\res\Data.xlsx")
     
}

mainForm.enableDpiScaling();
mainForm.show();

return win.loopMessage();

我将原文件上传到了云盘,可以下载:https://yunpan.360.cn/surl_yQa2B2RiUIU (提取码:7f00)
问题是我现在运行完程序后,EXCEL表格并没有将LISTVIEW的内容添加进去,请帮忙分析一下,哪里出错了!谢谢

EXCEL表格.jpg
LISTVIEW.jpg
好久没来了
回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2018-4-20 12:40:06 | 显示全部楼层
问题出在你的EXCEL表格文件Data.xlsx,这个EXCEL表格你新建一个,会是一个只有几K的大小文档。然后再写入就正常了。
回复

使用道具 举报

77

主题

196

帖子

1134

积分

新手入门

积分
1134
 楼主| 发表于 2018-4-20 13:30:21 | 显示全部楼层
alajia 发表于 2018-4-20 12:40
问题出在你的EXCEL表格文件Data.xlsx,这个EXCEL表格你新建一个,会是一个只有几K的大小文档。然后再写入就 ...

我重新建立了一个EXCEL文档,发现真的可以了,看来是跟这个EXCEL表格有关,因为我这个表格是从别人那里拷贝来的,原表很复杂,我删除了很多的东西,就留下简单的几个格子,可能是原表中有用到公式,所以会不成功。不知道是不是公式的影响呢?
好久没来了
回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2018-4-20 13:47:17 | 显示全部楼层
XLSX是一个压缩的目录,有其规范。可以塞进去很多无用的东西,有可能就是以前的格式、公式什么的,没有完全清除。你如果有时间和精力,也可以把它打开,再用新建正常的做对比,就能查出来了。
回复

使用道具 举报

0

主题

15

帖子

137

积分

培训班

积分
137
发表于 2018-4-22 10:52:33 | 显示全部楼层
本帖最后由 gang 于 2018-4-22 10:59 编辑

楼主的代码并没有问题,导出是成功的,只不过这个Data.xlsx文件,其实有sheet1--sheet9共9个表,除了这个"sheet1",还有8个隐藏了,最主要的是这个"sheet1",表名是"sheet1",实际上是sheet4。
楼主用VBA打开看一下,就清楚了。

另外,如果要保留格式的话,应使用sheet1.UsedRange.ClearContents(),而不是sheet1.UsedRange.clear()。
Image 1.png
回复

使用道具 举报

7

主题

305

帖子

1912

积分

新手入门

积分
1912
QQ
发表于 2018-5-4 10:38:17 | 显示全部楼层
把这句代码
sheet1 = book.sheets(1);

修改为:
sheet1 = book.sheets(“sheet1");
就可以了。

book.sheets(1)
引用的是Excel表的顺序号,在你的文件中sheets(1)并不是“sheet1”,表隐藏看不到而已,不是导出不成功,所以直接用book.sheets(“sheet1")就可以了。
每天进步一点点......
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-10-22 04:46 , Processed in 0.125000 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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