
多年來,我一直擁有一個半自動化系統,用於產生電氣設計的 BOM(物料清單)。透過 CAD 程式中的腳本(該腳本運行我很久以前編寫的一些外部程式碼),我獲得了一個製表符分隔值 (TSV) 檔案。此過程也會複製模板 XLS 檔案。此文件定義特定列的格式,而 TSV 檔案不能包含這些格式。
我會在 Excel 中開啟範本 XLS 文件,然後執行諸如 DATA, FROM TEXT FILE 之類的操作,為其指定文件名,然後按回車鍵 5 次以取得一堆預設值。 TSV 檔案中的資料將顯示在電子表格中,並具有範本檔案中的格式。有些單元格包含方程式而不是直接資料。這一切都會如預期進行。
從過去 15 年直到現在,這個程序都非常有效。顯然微軟在過去幾週更新了我的 Win10 筆記型電腦上的 Excel,現在一切都壞了。你從中得到什麼資料>來自文字>檔名是完全不同的。之前的所有控制現在都消失了,現在它猜測錯誤了。我找不到明顯的方法來啟用某些“傳統”模式,也沒有找到提供更多詳細資訊的方法。它只是做了它所做的事情,這與以前不同,它破壞了我的流程。
看來有兩個不相容的地方確實把事情搞砸了:
- 當第一行中的第一個儲存格包含數字時,它現在會自動新增自己的標題行。我使用單元格 A1 作為要建造的板的總數,因此根據該數字計算了各種數量。第一行中的其餘單元格是我的列標題。我同意第一列頂部有一個數字。那應該是我的事。
透過添加自己的標題行,我的所有方程式在垂直方向上都偏離了一位。什麼亂七八糟的!
- 方程式導入已損壞。當它取得包含“=”作為第一個字元的儲存格時,它會在“=”前面新增一個空格,然後將其餘部分視為字串。如果我手動編輯電子表格中的空間,那麼我就會得到預期的方程式。這樣的單元格有數百個,因此無法手動修復所有單元格。
如何返回之前的操作? 我不是 Excel 高手,也真的不想成為。我想繼續生成 BOM。
作為實驗,我手動將 TSV 檔案的幾行轉換為 CSV 檔案。導入會導致相同的問題。只需輸入 CSV 檔案名稱即可開啟 Excel,其中資料已正確加載,但它當然不知道我的列格式如何。
在某個地方的大灰塵下找到生成 TSV 檔案的程式應該不難,並根據需要進行更改。例如,如果我現在絕對需要 CSV 文件,我可以接受。我想我很久以前創建了一個 TSV 檔案來繞過某些單元格中文字字串中的特殊字元。同樣,這一切都有效了好幾年,直到幾週前。
答案1
這將允許您選擇並打開要導入的文件,它會打開一個新工作簿並僅貼上值,我從這裡。
Sub Makro1()
Dim fullpath As String
' Makro1 Makro
' Makro indspillet 13-07-2013 af Eric Bentzen
'
'
'Display a Dialog Box that allows to select a single file.
'The path for the file picked will be stored in fullpath variable
With Application.FileDialog(msoFileDialogFilePicker)
'Makes sure the user can select only one file
.AllowMultiSelect = False
'Filter to just the following types of files to narrow down selection options
.Filters.Add "Text Files", "*.TSV; *.TXT; *.CSV , 1"
'Show the dialog box
.Show
'Store in fullpath variable
fullpath = .SelectedItems.Item(1)
End With
On Error GoTo EndSub
Workbooks.OpenText Filename:=fullpath, _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), _
Array(11, 1), Array(12, 1), Array(13, 1)), _
TrailingMinusNumbers:=True
EndSub:
End Sub
看起來它可能只能執行 13 行,但可以進行修改以適應。