楼主: Imasasor
7052 24

[问答] 如果批量将excel 2007变成excel 2000,如何导入一个excel的多个sheet [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2024-10-10

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

楼主
Imasasor 发表于 2013-2-25 22:59:57 |AI写论文
888论坛币
遇到两个问题,望各位高手帮下忙

第一个问题,我的sas是9.2的,无法导入xlsx文件,每次可将其转换成2000xls才能导入,现在遇到一大批xlsx,每个都手动转换太麻烦, 怎么实现对某个文件夹内的所有xlsx全部转换成xls,同时不要改文件名字,不一定要用sas,用别的程序也可以


第二个问题,每个excel有多个sheet,举例(假设有三个):一年级, 二年级,三年级
这是三个sheet的名字,导入sas时,每次要打开看excel,并且在import中sheet=""; 填上相应的sheet名字
如何实现一下功能
假设一个excel有三个sheet,
在不打开excel的情况下,对三个sheet依次导入sas生成三个datasets,并且每个datasets中增加一个变量,值为sheet的名字。
总之就是用程序获取sheet名字


问题比较多,但确实需要解决,求高手

最佳答案

bobguy 查看完整内容

1) The first one can be done in a excel vba. 2) The second one can be done by using libname engine. BTW you don't really need to know the tab/sheet names. Here is an example. libname S EXCEL 'c:\temp\book1.xlsx'; proc sql noprint; select catt(trim(libname),'.',quote(trim(memname)),'n') into: namelist seperated by ' ' from dictionary.tables where libname in ('S'); quit; % ...
关键词:Excel 2007 EXCEL sheet xcel exce excel import 如何
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
bobguy 发表于 2013-2-25 22:59:58
1) The first one can be done in a excel vba.

2) The second one can be done by using libname engine. BTW you don't really need to know the tab/sheet names. Here is an example.


libname S EXCEL 'c:\temp\book1.xlsx';

proc sql noprint;
  select catt(trim(libname),'.',quote(trim(memname)),'n') into: namelist seperated by ' '
  from dictionary.tables
  where libname in ('S');
  quit;

%put &namelist;

data all;
   set &namelist;
run;

proc print;run;

********************log*************;
89  libname S EXCEL 'c:\temp\book1.xlsx';
NOTE: Libref S was successfully assigned as follows:
      Engine:        EXCEL
      Physical Name: c:\temp\book1.xlsx
290
291  proc sql noprint;
292    select catt(trim(libname),'.',quote(trim(memname)),'n') into: namelist separated by ' '
293    from dictionary.tables
294    where libname in ('S');
295    quit;
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.00 seconds
      cpu time            0.01 seconds


296
297  %put &namelist;
S."a$"n S."e$"n S."f$"n
298
299  data all;
300     set &namelist;
301  run;

NOTE: There were 1 observations read from the data set S.'a$'n.
NOTE: There were 1 observations read from the data set S.'e$'n.
NOTE: There were 1 observations read from the data set S.'f$'n.
NOTE: The data set WORK.ALL has 3 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


302
303  proc print;run;

NOTE: There were 3 observations read from the data set WORK.ALL.
NOTE: PROCEDURE PRINT used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
ziyenano + 5 + 5 + 5 观点有启发
Imasasor + 100 + 100 + 2 + 2 + 2 精彩帖子,他日若幸得拜会,定五体投地

总评分: 经验 + 100  论坛币 + 100  学术水平 + 7  热心指数 + 7  信用等级 + 7   查看全部评分

藤椅
sunpj031 发表于 2013-2-25 23:07:54
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

板凳
Imasasor 发表于 2013-2-25 23:12:51
贴一段davil大神以前写过的一段代码,程序可以控制电脑不断打开word,并将word内容填入到excel中

这段代码我不太懂,还请高人来改写一下,以实现:控制电脑自动打开excel,并自动另存为excel2000格式
  1. options noxwait noxsync;
  2. %macro word2sas(in=, out=);
  3. /*%let in=&fname;*/
  4. /*%let out=example1;*/
  5. %let rc=%sysfunc(system(start winword));
  6. data  _null_;
  7.    null= sleep(5);
  8. run;
  9. filename word DDE 'Winword|System';
  10. data _null_;
  11. file word;
  12. put '[FileOpen.Name = "' "&in" '"]';
  13. put "[EditSelectAll]";
  14. put "[EditCopy]";
  15. put '[FileClose]';
  16. put '[AppMinimize]';
  17. run;
  18. %let rc=%sysfunc(system(start excel));
  19. data  _null_;
  20.    null= sleep(5);
  21. run;
  22. filename excel dde 'excel|system';
  23. data _null_;
  24. file excel;
  25. put '[error(false)]';
  26. put '[paste]';
  27. put '[SAVE.AS("Example.xls")]';
  28. put '[Select.Last.Cell()]';
  29. put '[Copy]';
  30. put '[quit]';
  31. run;
复制代码
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

报纸
hamsik11 发表于 2013-2-26 00:27:07
用vba可以实现的

地板
webgu 发表于 2013-2-26 09:09:06
如果SAS版本低于9.2 TS2M2 以下,是无法导入XLSX文件的。
你的意思是希望用SAS 调用EXCEL07 或10 的程序,另存为xls ,然后导入?或者类似DDE?
如果这个问题解决了,第二个问题就很好解决了。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

7
Imasasor 发表于 2013-2-26 09:16:17
webgu 发表于 2013-2-26 09:09
如果SAS版本低于9.2 TS2M2 以下,是无法导入XLSX文件的。
你的意思是希望用SAS 调用EXCEL07 或10 的程序, ...
版主英明,我的意思就是这样,你看我贴的一段davil2000的程序,就是控制office软件进行打开,复制和粘贴,无奈看不懂,不会修改,另外,第二个问题,与第一个问题分开做,第二个问题的前提就是excel2000,用9.2可以导入,怎么导入多个sheet?并获取sheet的名字信息
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

8
ziyenano 发表于 2013-2-26 10:04:47
第一个问题,用dos试试,
将所有的xlsx文件放到一个文件夹内,假设为D:\test;
DOS下运行  ren D:\test\*.xlsx *xls,或者SAS中用x命令调用dos。
小数据量测试么有问题,不过xls格式最多存储6W多行,xlsx可以
存储几十W行,数据过多,转换肯定会有数据丢失的问题。
第二个问题,暂时么有想到好办法

9
Imasasor 发表于 2013-2-26 10:19:42
ziyenano 发表于 2013-2-26 10:04
第一个问题,用dos试试,
将所有的xlsx文件放到一个文件夹内,假设为D:\test;
DOS下运行  ren D:\test\* ...
第一个问题,试了一个dos,not ok啊
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

10
ziyenano 发表于 2013-2-26 10:27:03
Imasasor 发表于 2013-2-26 10:19
第一个问题,试了一个dos,not ok啊
是DOS命令报错,还是格式转了之后,文件报错?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 21:18