2010-07-02 247 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文件,以您的客戶端作爲條件導入數據(即拉取而非推送),併爲每個客戶端保存唯一的名稱。