CSV_tools.xla

CSV_tools.xla

如何將工作表或表格或選擇匯出為其他文件格式不更改目前活動文檔

我們主要的資料操作環境是Excel,大量使用格式和公式來得到我們想要的結果。然後將結果保存起來,.CSV以便與其他程序進行互通。

當“文件>>另存為>> 儲存類型 >> CSV" 用於建立 .csv 文件活動文檔更改為saved_file.csv.有一些關於失去功能和使用這種新格式進行格式化的警告,但使用者介面在其他方面沒有變化。有粗體和斜體、不同的字體和大小、背景單元格填充、定義的表格範圍等等。單元格中的所有公式均保持不變。

這是一場即將發生的災難。使用者回到工作中,陷入了認為一切正常的狀態,很快就忘記了當前格式不支援任何魔法,並繼續做重要的事情(tm)。午餐時間到了,他們關閉 Excel,對惱人的對話框按兩下“是”,因為他們總是看到這些對話框而無法閱讀,然後就出門了。 ……午餐後,用戶回來並意識到初始「另存為」和「退出」之間的所有工作都消失了。

“文件>>出口不幸的是,這只是「另存為」的另一個導航路線,也將活動文件更改為「some_file.csv」。

我們需要的是將一些資料匯出到另一種文件類型並保留活動文件“our-real-data.xlsx”。

如何才能做到這一點?並添加到選單或功能區以一鍵執行?

如何與組織中的每個人共享? (無需要求個人使用者開啟 VBA 編輯器等)

答案1

我們需要的是將一些資料匯出到另一種文件類型並保留活動文件“our-real-data.xlsx”。

CSV_tools.xla

自從你提到它以來,我已經整理了一個快速的 VBA 插件,它可以匯出為 CSV。我嘗試使用盡可能少的程式碼,以便新用戶可以更輕鬆地理解它。

它有什麼作用

  • 加載項詢問在哪裡儲存 CSV。預設資料夾是保存 XLS 的資料夾
  • 加載項會自動偵測是否應根據您的區域系統設定使用逗號或分號作為分隔符
  • 目前活動 Excel 工作表的所有值都會匯出到以 XLS 檔案命名的新 CSV 檔案
  • 現有的 XLS 不會受到任何影響

安裝

  1. 下載加入並將其保存到下面C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. 打開Excel並在下面激活它
    • Excel 2003:功能表列→工具→加載項
    • Excel 2007:Excel 選項 → 加載項 → 前往
    • Excel 2010-13:“檔案”標籤→“選項”→“加載項”→“轉到”
  3. 重新啟動 Excel 並查看功能表列

    在此輸入影像描述

VBA程式碼

Function ExportCSV()

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    On Error Resume Next
    ChDrive (ActiveWorkbook.Path)
    ChDir (ActiveWorkbook.Path)
    strName = fso.GetBaseName(ActiveWorkbook.Name)
    On Error GoTo 0

    strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
    delimiter = Application.International(xlListSeparator)
    If Not strFilename = False Then

        Open strFilename For Append As #1

        For Each rngRow In ActiveSheet.UsedRange.Rows
            arr2D = rngRow
            arr1D = Application.Index(arr2D, 1, 0)
            strRow = Join(arr1D, delimiter)
            Print #1, strRow
        Next

        Close #1
    End If

End Function

針對不同使用者自動更新

一旦每個使用者在其 Excel 中啟用了加載項(無法自動化),您就可以.xla透過網路共用、Robocopy 或類似工具複製新檔案版本。但這應該是一個單獨的問題,因為有太多不同的方法來解決這個問題。


對於 VBA 極客來說,最有趣的部分是

arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)

它使用 Join() 函數將範圍(在我們的例子中為單行)轉換為 2D 數組,然後轉換為 1D 數組,最後轉換為單一字串

答案2

教導用戶開啟該資料的副本。

選擇 Office 文件時,可以右鍵單擊該圖標,然後按一下「新建」。這將根據原始文件/工作表/簡報建立一個新文件/工作表/簡報。用戶只需執行「另存為」即可從中匯出

我希望你也有良好的備份,但如果你這麼擔心的話...

相關內容