
В течение многих лет у меня была полуавтоматическая система для создания спецификаций (BOM) для электрических проектов. С помощью скрипта в моей программе CAD, который запускает некий внешний код, написанный мной давно, я получаю файл значений, разделенных табуляцией (TSV). Этот процесс также копирует файл шаблона XLS. Этот файл определяет форматирование для определенных столбцов, которые файл TSV содержать не может.
Я бы открыл файл шаблона XLS в Excel, затем сделал бы что-то вроде ДАННЫЕ, ИЗ ТЕКСТОВОГО ФАЙЛА, дал бы ему имя файла и нажал бы Enter 5 раз, чтобы взять кучу значений по умолчанию. Данные из файла TSV появились бы в электронной таблице с форматированием из файла шаблона. Некоторые ячейки содержали бы уравнения вместо прямых данных. Все это работало бы так, как и предполагалось.
Эта процедура отлично работала последние 15 лет, до сих пор. Видимо, Microsoft обновила Excel на моем ноутбуке Win10 за последние несколько недель, и теперь все сломалось. Что вы получаете отДАННЫЕ > ИЗ ТЕКСТА > имя файласовершенно другой. Все элементы управления из прошлого теперь отсутствуют, и теперь он угадывает неправильно. Я не могу найти очевидный способ включить какой-то "устаревший" режим, и я не вижу способа дать ему больше деталей. Он просто делает то, что делает, что отличается от того, что было раньше, и это нарушает мой процесс.
Похоже, есть две несовместимости, которые действительно все портят:
- Когда первая ячейка в первой строке содержит число, она теперь автоматически добавляет свою собственную строку заголовка. Я использовал ячейку A1 как общее количество досок для сборки, поэтому различные количества были вычислены из этого числа. Оставшиеся ячейки в первой строке являются моими заголовками столбцов. Меня устраивает, что первый столбец имеет число вверху. Это должно быть моим делом.
С добавлением собственной строки заголовка все мои уравнения сбились на единицу по вертикали. Что за беспорядок!
- Импорт уравнения сломан. Когда он получает ячейку, содержащую "=" в качестве первого символа, он добавляет пробел перед "=", а затем обрабатывает остаток как строку в результате. Если я вручную удаляю пробел в таблице, то получаю нужное уравнение. Таких ячеек сотни, поэтому вручную исправить их все не получится.
Как вернуться к предыдущей операции? Я не гуру Excel, и не хочу им быть. Я хочу заняться созданием своих спецификаций.
В качестве эксперимента я вручную преобразовал несколько строк файла 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 строк, но его можно модифицировать по мере необходимости.