ACC2000: 備忘] 欄位報表都會輸出到 Excel 時被截斷

文章編號: 208801 - 檢視此文章適用的產品。

進階: 須具備專家編碼、 互通性,與多使用者技能。

本文章的有 Microsoft Access 2002] 版本請參閱 294286
全部展開 | 全部摺疊

在此頁中

徵狀

當至 Microsoft Excel 將報表輸出任何備忘] 欄位會被截斷成 255 個字元。當您預覽報表時,按一下 分析它與 MS Excel 指令時,您可能也會看到這個行為。

發生的原因

在 Excel 中, 文字儲存格內容的最大長度是 32,000 個字元。不過,Access 輸出至 Excel 5.0/95 格式的文字儲存格內容的最大長度是 255 報表。

解決方案

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。

方法 1

Excel 2000 檔案格式匯出基礎資料表或查詢。如果要執行這項操作,請依照下列步驟執行:
  1. 在 [資料庫] 視窗中選取報表基礎的查詢的資料表。
  2. 在 [檔案] 功能表上按一下 [匯出]。
  3. 匯出資料表 '< 資料表名稱 >' 對話方塊選取 Microsoft Excel 97-2000 (*.xls),從 [檔案類型] 方塊。
  4. 按一下 [匯出資料表的 [儲存]。

方法 2

在該報表以分隔成 250 個字元字串的 [備忘] 欄位上建立文字方塊。您輸出報表後重組這些字串。

比方說假設您是在名為備忘稿,備忘] 欄位,而且某些記錄中該欄位的內容是 700 個字元長。您可以建立下列三個運算式的每一個報表中的三個文字方塊作為控制項來源的其中一個 [文字] 方塊:
=Mid([Notes],1,250)

=Mid([Notes],251,250)

=Mid([Notes],501,250)
您輸出至試算表報表之後可重組區段的 [備忘] 欄位。例如,區段的第一筆記錄的 [備忘] 欄位中會顯示儲存格 B2,C2,與 D2 分別。您可以在另一個儲存格 E2 中輸入下列公式以重組備忘] 欄位:
=CONCATENATE(B2,C2,D2))
然後您可以將此公式複製到其餘欄 E 重組的所有記錄的 [附註] 欄位中儲存格的上。

請注意 CONCATENATE 函數在當您嘗試使用公式時,會傳回錯誤 # VALUE
=CONCATENATE(B2:D2))
必須分別列出您要在串連結果中包含其內容的每個儲存格的位址。

的話,在 [備忘] 欄位中資料的長度會需要建立多個文字方塊,您可以使用應用程式程序的 Visual Basic 來自動化這些文字方塊建立。下列範例示範如何使用程序來建立文字] 方塊和再輸出報表和重組 [文字] 方塊的內容。
  1. 請遵循步驟 1 到 7,在本文稍後在 < 步驟來重現 > 一節中。
  2. 在 [設計] 檢視中 tblMemoOutput 資料表為基礎建立新的報表。
  3. 將 ID 欄位拖曳到報表的詳細資料區段。
  4. 將報表儲存為 rptMemoOutput。
  5. 開啟新的模組,然後輸入下列的程序:
    Function MemoSplitter(strReportName As String, _
       strFieldName As String, lngMemoLength As Long)
    
       Dim NewControl As Control
       Dim intLoopCount As Integer
       For intLoopCount = 0 To lngMemoLength / 250
    
          Set NewControl = CreateReportControl(strReportName, _
             acTextBox, acDetail)
          NewControl.Name = intLoopCount & "MemoText"
          NewControl.ControlSource = "=Mid([" & _
             strFieldName & "]," & 250 * intLoopCount + 1 _
             & ",250)"
       Next intLoopCount
    
    End Function
    					
  6. 編譯並將模組儲存為 mdlSplitFunction。
  7. 在即時運算視窗中輸入下列命令並按下 ENTER:
    ?MemoSplitter("rptMemoOutput","Notes",5200)
    					
  8. 在 [預覽列印] 中檢視報表。在 [工具] 功能表上指向 [Office 連結,然後按一下 [分析它與 MS Excel]。
  9. 當資料出現在 Microsoft Excel 試算表檔案中時,按一下 [儲存格 A1 ; 按下 CTRL + SHIFT + END 若要選取所有資料。
  10. 在 [格式] 功能表上指向 [資料列,然後按一下 [自動調整]。
  11. 選取儲存格 A2。按一下 [插入] 功能表
  12. 儲存格 A2 中輸入下列公式:
    =VALUE(LEFT(A1,FIND("M",A1,1)-1))
  13. 將公式複製至儲存格 B2-U2
  14. 選取儲存格 A2-U2
  15. 編輯] 功能表上按一下 [複製]。
  16. 在 [編輯] 功能表上按一下 [選擇性貼上]。
  17. 貼上,在 [選擇性貼上] 對話方塊,] 下按一下 [值],然後按一下 [[確定]。這將在第二列中的公式轉換可以讓您排序區段的 [附註] 欄位的值。
  18. 按一下 [儲存格 A2,然後按 CTRL + SHIFT + END 全選,但第一列資料。
  19. 按一下 [資料] 功能表 排序
  20. 在 [排序] 對話方塊中,按一下 [選項]。
  21. [排序選項] 對話方塊中的 列印方向,] 之下按一下 [靠右收排序靠左]。然後按一下 [確定]
  22. 在 [排序] 對話方塊按一下 [排序依據] 清單中中的 [Row2,然後按一下 [若要排序的 附註] 欄位區段的 [確定]
  23. 在儲存格 W3 輸入下列公式:
    =CONCATENATE(A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3,M3,N3,O3,P3,Q3,R3,S3,T3,U3)
  24. 複製公式至儲存格 W3W4 重組每一筆記錄的 [附註] 欄位。

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。

其他相關資訊

重製行為的步驟

  1. 啟動 Microsoft Access 然後開啟任何資料庫。
  2. 建立下列的資料表命名 tblMemoOutput:
       Table: tblMemoOutput
       --------------------
       Field Name: ID
       Data Type: Text
       Field Name: Notes
       Data Type: Memo
    					
  3. 為 tblMemoOutput 儲存資料表。當提示您建立主索引鍵,按一下
  4. 在 [資料工作表] 檢視中開啟資料表,並輸入下列記錄:
       ID   Notes
       --   -----
       a    a
       b    b
       c    c
    					
  5. 開啟新的模組,然後輸入下列的程序:
    Function FillMemo(strTableName As String, _
       strFieldName As String)
    
       Dim db As Database
       Dim rs As Recordset
       Dim intLoopCount As Integer
    
       Set db = CurrentDb
       Set rs = db.OpenRecordset(strTableName)
    
       Do Until rs.EOF
          rs.Edit
    
          For intLoopCount = 1 To 26
             rs(strFieldName) = rs(strFieldName) _
                & String(200, Chr(intLoopCount + 64))
          Next intLoopCount
    
          rs.Update
          rs.MoveNext
       Loop
    
       db.Close
    
    End Function
    
    					
  6. 編譯並將模組儲存為 mdlDataFunction。
  7. 即時運算視窗中輸入下列並按下 ENTER:
    ?FillMemo("tblMemoOutput","Notes")
    					
  8. 使用自動產生報表: 單欄式精靈] 來建立報表依據 tblMemoOutput。在 [預覽列印] 中檢視報表。
  9. 在 [工具] 功能表上指向 [Office 連結,然後按一下 [分析它與 MS Excel]。
  10. 當資料顯示在 Microsoft Excel 的試算表檔案時,儲存格 C2 鍵入下列公式:
    =LEN(B2)
    請注意在 [附註] 欄位中的資料已被截斷為 255 個字元。

?考

如需有關如何將 Microsoft Excel 中載入報表輸出的詳細資訊,按一下 [說明] 功能表上的 [Microsoft Access 的 [說明],並在 「 Office 小幫手 」 或 「 解答精靈 」 中輸入 [輸出資料 然後按一下 [搜尋] 以檢視所傳回的主題。

屬性

文章編號: 208801 - 上次校閱: 2005年6月23日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft Access 2000 Standard Edition
關鍵字:?
kbmt kbbug kbpending KB208801 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:208801
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見