【发布时间】:2020-12-10 13:29:08
【问题描述】:
在没有including the Excel-file as library 的情况下,有没有快速确定 Excel 文件中 Excel 工作表名称的方法?我只需要一个包含所有工作表名称的数组,而不是工作表本身的数据,理想情况下我可以模拟如下形式:
%let my_sheet_names = Sheet1 Sheet2 Sheet5; /* Assuming that there are no spaces in the tab sheet names */
%let my_sheet_number = 3;
背景
我有一个巨大的 XLSX 文件,我必须从中提取几张纸上的几个单元格。没错,我将它们转换为 XLS,以便以下(历史)结构起作用:
%do i=1 %to &my_sheet_number.;
%let my_sheet = %scan(&my_sheet_names.,&i.);
proc import
data= &full_path.;
dbms= xls out=work.raw_value replace;
getnames=NO;
range="&mysheet.$E1:E1";
run;
proc sql noprint;
select * into :tmp;
from work.raw_value;
quit;
/* Do something with &tmp.; */
%end;
我需要预先提供 Excel 工作表 all_sheets 的整体列表,以便找到 all_sheets 与另一个列表 chosen_sheets 的交集,然后从上面是 my_sheet_names,包含我想要循环的工作表.如果我可以直接提取单元格,那么阅读包含所有工作表的完整 XLS(X) 对我来说听起来不太实用。
参考文献
相关,但不能解决我的问题:
【问题讨论】:
-
您有 XLSX 文件或旧的 XLS 文件或其他类型的 Excel 文件吗?
-
现在是 XLS,但如果您能详细说明这两个问题,那就太好了。
-
XLSX 文件会更容易,因为您可以使用 XLSX libname 引擎,甚至只需从文件中提取带有工作表列表的 XML 文件并读取它。无需 Microsoft 工具。
-
@Tom 我可以将它转换回 XLSX,但问题是历史结构(我刚刚编辑到问题中)将停止工作。