【问题标题】:SAS put data to Excel via DDESAS 通过 DDE 将数据放入 Excel
【发布时间】:2017-11-13 14:18:29
【问题描述】:

我想通过 DDE 将一些数据写入 Excel 并具有以下代码:

option noxwait noxsync;
x call "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE";

%let delay=5;
data _null_;
    rc=sleep(&delay); 
run;

filename random dde 'excel|Tabelle1!r1c1:r100c3';
data _null_;
    set sashelp.class;
    file random;
    put name sex age;
run;

Excel 成功打开,但工作表仍然为空。日志告诉我有 19 条记录被写入了 RANDOM 文件。

关于为什么数据没有写入我的 Excel 工作表的任何建议?能否与我在 Excel 中的语言设置(德语)相关联?

【问题讨论】:

  • 您是否尝试过在打开 excel 和运行数据步骤之间添加 5 秒延迟?
  • 是的,请在我的问题中找到我的编辑。
  • 我会重新考虑使用 DDE。尝试改用ods excel,尤其是当您只是将表格转储到新工作表时。
  • @RobertPenr​​idge:这不符合我的要求。我有一个 Excel 模板文件,想添加一些数据。在其他情况下,你是对的。

标签: excel sas dde


【解决方案1】:

NOXSYNC 在这里是一个错误。

基本上,当我运行它时会发生什么,如果设置了NOXSYNC,它将无法工作,因为它会在 Excel 准备好之前尝试写入 Excel 工作表。您需要 XSYNC 让 SAS 等待 X 命令完成。

如果XSYNC 是您无法处理的,那么您将需要添加手动延迟。

我还会在运行此之前验证您没有打开 Excel,就好像您这样做可能会写入与它正在打开的工作簿不同的 Excel 工作簿。

【讨论】:

  • 感谢所有提示,但没有解决我的问题。我试过xsync 和延迟,当我启动代码时总是没有打开 Excel 实例。我在同事的电脑上看到了类似的代码。但我们找不到我的问题。
  • @zuluk x-window 在你的机器上是否保持打开状态?
  • 是的,noxsync。否,xsync
  • 如果你运行它两次而不做任何其他事情怎么办?第一个会话是否被写入? (当我没有xsync 或延迟时,它对我有用。)
  • 我必须更正:从xsync 开始,延迟 5 秒会导致会话挂起。它显示“X 命令已激活”。使用noxsync 运行该程序两次会导致 2 个空的 Excel 文件和工作表。毫不拖延地一样。
【解决方案2】:

我最后的一个非常疯狂的故事:当我将语言设置从德语更改为英语时,它可以正常使用显示的代码。

更新: 它也适用于德语设置,但是我必须翻译所有语句,例如写入范围:

英文Excel

filename random dde 'excel|Sheet1!r1c1:r100c3';

德语 Excel 使用 z(eile) 和 s(palte) 代替 r(ow) 和 c(olumn)

filename random dde 'excel|Tabelle1!z1s1:z100s3';

【讨论】:

  • 很高兴你把它整理好了。您可能想与其他德国开发人员交谈,看看是否有特定的东西可以使它在德语中工作 - 如果不太可能只有很小的差异(甚至可能不使用 TabelleSheet 甚至用德语跑步时?)。
  • 如果您使用的文件已经存在并且有您的德语名称,会发生什么?我怀疑它也会起作用。
猜你喜欢
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 2011-12-24
相关资源
最近更新 更多