搜索
查看: 678|回复: 8

access读取淘宝客生成的EXCEL文件乱码。有什么方法可读取正常数据么?

[复制链接]

12

主题

45

帖子

325

积分

二级会员

Rank: 3Rank: 3

积分
325
发表于 2018-7-31 11:51:36 | 显示全部楼层 |阅读模式
本帖最后由 liaolj03 于 2018-7-31 11:55 编辑

因为没有appkey读取淘宝客数据,于是想直接登录阿里妈妈,下载所有商品的EXCEL文档(1W条数据),然后直接用ACCESS读取EXCEL。
因为水平问题,这两天一直在尝试,但从未成功。嘻,,

尝试代码如下:
  1. <div class="blockcode"><blockquote>
复制代码
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add()
  5. /*}}*/
  6. import access;
  7. //var db,err = access("/test.xls")
  8. var tables={};
  9. var msg = ::MSG();       
  10. win.peekPumpInputMessage(msg)
  11. //方法一:
  12.         //tables=db.getTable("SELECT * FROM [Page1$]");

  13. /*
  14.         for(rs,v in tables){
  15.                 winform.msgbox(rs)
  16.                 winform.msgbox(v)
  17.                 winform.msgbox(tables[rs].商品名称)
  18.         }
  19. */

  20. //方法二:
  21.         for(rs in db.each("SELECT * FROM [Page1$]")){
  22.                 winform.msgbox(rs(1).value)
  23.         }
  24.        
  25. winform.show()
  26. win.loopMessage();
复制代码

不知道是不是还有别的办法来读取EXCEL,因为程序考虑到会放到免费服务器空间运行,所以不能安装EXCEL或WPS,所以不考虑用COM来操作。
用getTable获取的时候,有一个不知是BUG,还是什么问题,直接从阿里妈妈那里下载下来的EXCEL,如果我不另存为一次,获取的数据的表头就是?号,无法用tables[rs].商品名称获取正常 数据,但是我用WPS直接打开EXCEL另存一次xls 文件后,显示为正常。


问题一:程序自动从阿里妈妈那里下载EXCEL,自动获取数据,没办法手动另存为,如果不安装EXCEL或WPS,有没有办法用代码的方式去另存一次下载下来的xls文档呢????
问题二:如果不管xls文档,有没有别的帮法读取xls文档里边的表头不为“???”号呢???
问题三:有没有别的思路去搞这东西呢,谢谢,,
附件为EXCEL文档。
test.7z (5.88 KB, 下载次数: 11)
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-7-31 13:05:15 | 显示全部楼层
试了一下就不停的弹对话框,求助的同时能考虑一下方便他人吗?!改一下显示到文本框不行吗?!
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
edit={cls=
"edit";text="edit";left=32;top=16;right=720;bottom=408;edge=1;multiline=1;z=1}
)
/*}}*/

import access;
var db = access( "\test.xls")

for(rs in db.each("SELECT * FROM [Page1$]")){
    winform.edit.print( rs(1).value )
}

winform.show()
win.loopMessage();
另外测试了并没有乱码,


access使用的是COM接口,COM使用的是Unicode怎么会有乱码呢?!
就算有乱码,你是不是该先找一下自己系统的原因?!

access.png
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-7-31 13:10:23 | 显示全部楼层
以后提问请把问题筛选一下,表达清楚,
不要问题一、问题二、问题三........提问这个事又不是买了什么包月不限量免费套餐。

问题一:你问的是阿里妈妈没办法手动另存为,然后你的问题是怎么做到不手动另存为。。。。。你到底是要手动还是不要手动?!
问题二:你问的是不管xls文档,怎么去读取xls文档。。。。。那么你到底是要管他还是不要管他?!
问题三:你问的是有没有别的思路去搞这东西。。。。。你思路都没有,那我们讨论什么好呢?!

因为忙,没时间仔细看你的帖子,你的问题一、问题二、问题三......看的都不是很明白,而且你说的乱码问题也无法重现。
回复

使用道具 举报

12

主题

45

帖子

325

积分

二级会员

Rank: 3Rank: 3

积分
325
 楼主| 发表于 2018-7-31 13:36:04 | 显示全部楼层
不好意思,下次一定会改,
其它问题Jacen你忙就不用管了,可以帮我看看这个是系统问题,还是我代码问题,,谢谢。,。
乱码的是方法一,

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add(
  5. edit={cls="edit";text="edit";left=7;top=10;right=553;bottom=320;edge=1;multiline=1;z=1}
  6. )
  7. /*}}*/

  8. import access;
  9. var db,err = access("/test.xls")
  10. var tables={};
  11. var msg = ::MSG();        
  12. win.peekPumpInputMessage(msg)
  13.         tables=db.getTable("SELECT * FROM [Page1$]");
  14.         for(rs,v in tables){
  15.                 //winform.edit.text=v//因为用edit文本框看不出table里的内容。
  16.                 winform.msgbox(v)
  17.         }        
  18. winform.show()
  19. win.loopMessage();
复制代码


因为用文本显示出来的是一个table没办法显示table里的内容。所以用了msgbox来显示,给Jacen带来的不停提示的不方便之处。
TIM图片20180731132823.png

用msg看到的信息是上边图那样,就是表头变成了???号,

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-7-31 14:19:36 | 显示全部楼层
liaolj03 发表于 2018-7-31 13:36
不好意思,下次一定会改,
其它问题Jacen你忙就不用管了,可以帮我看看这个是系统问题,还是我代码问题,, ...

你自己都已经看到了,
excel与aardio之间传字符串不会有乱码,
因为aardio使用Unicode编码/COM接口也是Uniocode编码,都是不可能造成乱码的。

至于你的问题属于excel为什么给你的表头是乱码,这个我回答不了你,你需要到微软咨询反馈一下。
当然,这个问题你也属于无意义的纠结,因为SQL通常是不需要处理表头的,也没必要在表头里使用中文,尤其是excel

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-7-31 14:23:24 | 显示全部楼层
至于你非要给我弹对话框,这个我前面已经说过一遍了:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
edit={cls=
"edit";text="edit";left=7;top=10;right=553;bottom=320;edge=1;multiline=1;z=1}
)
/*}}*/

import access;
var db = access("/test.xls");
var tab = db.getTable("SELECT * FROM [Page1$]");
winform.edit.print(tab);
     
winform.show()
win.loopMessage();

以后提问,请像这样把代码写简单一点,
跟你的问题无关的代码请删除,无意义的循环弹对话框请删除,
因为夹杂的无关代码、文字一多,别人就会看不到重点,看不到重点就试了第一次,又要帮你试第二次.........而别人通常没这么多时间。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-7-31 14:24:09 | 显示全部楼层
这么一个简单的问题都能扯这么长,感觉跟aardio都没什么关系。
回复

使用道具 举报

12

主题

45

帖子

325

积分

二级会员

Rank: 3Rank: 3

积分
325
 楼主| 发表于 2018-7-31 14:29:17 | 显示全部楼层
好吧,因为水平太低了,总觉得是自己的问题,不好意思,麻烦Jacen了,谢谢,看来是EXCEL的问题了,找微软,那就没得玩了,我想想有没有别的办法去处理吧。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-7-31 15:18:41 | 显示全部楼层
我帮你试了一下用 db.findTableObject 读出来的字段名仍然是乱码,我估计你用其他语言试结果也是一样的,sql读excel本来就很多坑,你可以试试服务器上是不是可以下载csv,如果是csv就可以自己分析了。

你那个问题一,如果你是指不知道怎么写硬盘文件,那么这样写:
string.save("/test.xls",你下载的数据)

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-12-17 01:39 , Processed in 0.093750 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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