2010-07-02 246 views
1

我在Access中有一个表我导出到Excel,并且我使用VBA代码导出(因为我实际上每创建一个单独的Excel文件时, 150个文件)。不幸的是,当我使用DoCmd.TransferSpreadsheet执行此操作时,我失去了前导零。我能够通过循环遍历记录并逐个写入每个单元格(并在写入之前格式化单元格)来解决此问题。不幸的是,这导致了8小时的运行时间。使用DoCmd.TransferSpreadsheet,它运行一个小时(但是然后我失去了前导零)。有没有什么办法可以告诉Excel在使用TransferSpreadsheet命令时将每个单元格作为文本对待?任何人都可以想到另一种方法来做到这一点,不需要8个小时?谢谢!从Access导出数据到Excel而不丢失前导零

回答

1

用撇号(')字符作为Excel值的前缀。撇号告诉Excel将数据视为“文本”。

如;

0001 'Excel treats as number and strips leading zeros 

成为

'0001 'Excel treats as text 

您可能需要创建一个表达式字段与撇号前缀的字段,如;

SELECT "'" & [FIELD] FROM [TABLE] 
+0

对不起,延迟接受 - 我想我已经完成该项目提交时间。这当然好像它会工作 - 我知道我不想改变表中的数据,但我可以很容易地创建一个查询(就像你建议的),然后在查询中使用DoCmd.TransferSpreadsheet。我也不想追加一个'x'(这是另一张海报推荐的)b/c我不想在Excel中操作数据,所以这个撇号是一个很好的建议。感谢您的意见。 – rryanp 2012-06-06 14:56:00

0

如果你:

  1. 在你的源表,更改列类型为字符串。
  2. 循环访问源表并向该字段添加“x”。

如果Excel数据旨在被人读取,您可以获得创意,如隐藏数据列,添加引用数据列的“显示”列,但删除“x” 。

1

作为我的其他建议的替代方法,您是否玩过Excel的“导入外部数据”命令?使用Access VBA,您可以遍历客户端,打开模板Excel文件,以您的客户端作为条件导入数据(即拉取而非推送),并为每个客户端保存唯一的名称。