注册 登录
编程论坛 VB6论坛

【求助】VB中的ListView保存成Excel报错的问题,有没有其他解决方案

叶子三分青 发布于 2021-02-23 10:05, 2943 次点击
公司的老程序导出为Excel的方法是引用了Ms Excel 12.0 Object Library然后 CreateObject("Excel.Application") ,但我的新电脑上安装了Office2007之后导出会出现报错的问题(自动化错误,对象库未注册),在网上找了很多方法都没解决(重新注册控件、重装Office等),客户的电脑也有几台会出现这样的问题(甚至也有没装2007的Office,用WPS的),因此我想问有没有其他DLL或解决方案可以直接根据listView生成Excel文件,免去安装Office这一步。
13 回复
#2
yuma2021-02-23 11:06
直接根据listView生成Excel文件,免去安装Office这一步。

这是不可能的

你使用EXCEL / WORD库,首先你电脑里要有库。安装库就是安装office或wps。这一点国外网站有讨论过。

不过有些公司网站写,它们开发的有接口可以操作、生成对应格式的文件。

[此贴子已经被作者于2021-2-23 11:15编辑过]

#3
风吹过b2021-02-23 20:26
白天查了一下,可以使用生成XML的方式,来生成 XLSX 类型的 Excel 的文件格式。
xlsx是一个zip压缩包,解压后有几个文件,你依照这样的格式去写xml,最后打包成 xlsx 就可以了。

关键是这个XML:工作簿1.xlsx\xl\worksheets\sheet1.xml
然后内容是这些,其他都可以直接使用原始文档
<sheetData>
  <row r="1" spans="1:3">
    <c r="A1"><v>1</v></c>
    <c r="B1"><v>2</v></c>
    <c r="C1"><v>3</v></c>
  </row>
  <row r="2" spans="1:3">
    <c r="A2"><v>4</v></c>
    <c r="B2"><v>5</v></c>
    <c r="C2"><v>6</v></c>
  </row>
</sheetData>


[此贴子已经被作者于2021-2-23 20:35编辑过]

#4
yuma2021-02-23 20:33
这前面发了好多EXCEL操作代码,楼主可以搜索一下。
#5
叶子三分青2021-02-23 21:52
回复 4楼 yuma
我电脑上明确安装了office,VB引用里面也能看到库是有的,但是我就是一用Excel的对象就会报错,所以才想问问有没有别的办法,或者解决我这个报错的办法
#6
叶子三分青2021-02-23 21:57
回复 3楼 风吹过b
没尝试过VB做压缩,迟点我看看怎么做,我看了下面这个文章,也只说了直接写xml,保存是直接保存xls格式,不知道行不行
https://www.

[此贴子已经被作者于2021-2-24 08:01编辑过]

#7
叶子三分青2021-02-24 08:36
回复 6楼 叶子三分青
刚才尝试了一下,将文档打包成zip之后excel打开报错(文档损坏)……是不是压缩是别的格式的?
#8
yuma2021-02-24 10:18
你代码发上来,我们看看。
#9
叶子三分青2021-02-24 10:58
回复 8楼 yuma

Dim Excels As New Excel.Application
Excels.Visible = False '这一句就直接报错了


另外那个压缩成zip的我是手动用7-Zip解压和压缩的,压缩之后改扩展名之后打开就报错,我看网上好像都是拖回到压缩包里的,重新打包没有人提到过……

只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-2-24 11:02编辑过]

#10
风吹过b2021-02-24 13:12
手动修改文件测试了下,只修改这部分,然后使用winrar压缩,文件格式选择 zip ,然后改名,wps打开不报错,修改生效。
<sheetData><row r="1" spans="1:3"><c r="A1"><v>1</v></c><c r="B1"><v>2</v></c><c r="C1"><v>3</v></c></row><row r="2" spans="1:3"><c r="A2"><v>4</v></c><c r="B2"><v>5</v></c><c r="C2"><v>6</v></c></row><row r="4" spans="1:3"><c r="A4"><v>7</v></c><c r="B4"><v>9</v></c><c r="C4"><v>10</v></c></row></sheetData>
----------------------------------------------
先直接保存文件头
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas. xmlns:r="http://schemas. xmlns:xdr="http://schemas. xmlns:x14="http://schemas. xmlns:mc="http://schemas. xmlns:etc="http://www. ref="A1:C2"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="E8" sqref="E8"/></sheetView></sheetViews><sheetFormatPr defaultColWidth="9" defaultRowHeight="13.5" outlineLevelRow="1" outlineLevelCol="2"/>
然后再自己生成数据
<sheetData>              数据区开始
<row r="1" spans="1:3">  行开始,里面参数没去分析
<c r="A1"><v>1</v></c>   一个单元格,r=表示单元格编号,<v>1</v> 表示值
。。。。。
</row>                   行结束
</sheetData>             数据区结束
根据你要生成的数据,按行组合生成单元格信息,然后拼起来,组合成数据块。
最后写入文件结尾
<pageMargins left="0.75" right="0.75" top="1" bottom="1" header="0.5" footer="0.5"/><headerFooter/></worksheet>

更新完 sheet1.xml 后,再打包成 zip 格式文件,注意压缩包里路径问题。
然后再改名。


#11
yuma2021-02-24 14:12
楼主把代码发上来,给你看看。
#12
yuma2021-02-24 15:16
只有本站会员才能查看附件,请 登录


这代码一看就是乱写的,绝对不是我写的。我的代码都是经过调试才往上发的。
#13
叶子三分青2021-02-25 08:00
回复 10楼 风吹过b
我这边尝试了一下我这里并不行,源文件我是新建的xlsx文件,然后解压出来直接改的sheet1.xml,就复制你上面的代码,压缩成zip改名之后打开会提示损坏,我是office2012
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#14
叶子三分青2021-02-25 10:58
回复 12楼 yuma
这个代码在别人电脑上能正常运行和调试的……您的写法我还没了解过,能提供一下链接吗
1