Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 16:12   #1
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию Нюансы импорта данных из файла. Как задать кодировку?

Сначала суть работы файла:
Есть несколько txt файлов с одинаковой структурой (таблицами) но разные данные.
Необходимо указать путь ко всем этим файлам, задать параметры импорта (кодировка, разбивка по столбцам и т.д.) при загрузке первого файла, а остальные файлы загрузятся в эксель (каждый на свою страницу) автоматически с теми же настройками.

С настройками разбивки по столбцам и типом каждого столбца я разобрался.
А вот с настройкой кодировки текста не получается...
____
Пример файла приложен
____

А теперь суть проблемы:

Если импорт файла .txt записать макросом, то получится код содержащий все параметры, которые были заданы при импорте.

Если при импорте указать формат файла 1251: Кириллица(Windows)

то в коде будет строчка
.TextFilePlatform = 1251
которой задается кодировка текста.

Если задать 866: Кириллица(Dos)

то в коде будет строчка
.TextFilePlatform = 866

ОДНАКО если записать данный параметр в перемнную X, вызвав окно импорта файла макросом
вот так:

If Application.Dialogs(xlDialogImportT extFile).Show Then
With ActiveSheet.QueryTables(1)
X = .TextFilePlatform
End With
Else: MsgBox "Отменен"
End If

то значение X уже будет не 1251 или 866,
а 29 и 24 соответственно.
И это будет порядковый номер кодировки в списке где выбираешь.

Если потом сделать импорт файла макросом и задать значение
.TextFilePlatform = X

то, естественно, желаемого результата не получится...

Как все же правильно задавать значение переменной X, вызвав окно импорта файла макросом ?
Вложения
Тип файла: rar Импорт TXT файлов 2.rar (23.6 Кб, 23 просмотров)
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 07.12.2011 в 08:19.
Snekich вне форума Ответить с цитированием
Старый 07.12.2011, 13:21   #2
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Я уже сделал вот такую табличку из 2-х колонок, представляющую собой список всех кодировок в моем Excel 2007 и некий порядковый номер который присваивается каждой кодировке.
Т.е. в моем случае первый столбец это получаемое значение X, а второй столбец - код кодировки который мне как раз нужно задавать переменной.
(как видно они не совсем по порядку, я проверил только начало этого списка, конец и несколько из середины)

1 10000
2 1252
3 850
2 708
4 720
5 28596
6 10004
7 1256
8 775
9 28594
10 1257
11 852
12 28592
13 10029
14 1250
15 54936
16 936
17 20936
18 10008
19 950
20 20000
21 20002
22 10002
23 10082
24 866
25 28595
26 20866
27 21866
28 10007
29 1251
...
103 20105
104 28591
105 10000
106 1252

Если импорт файла записать макросом то в параметрах импорта запишется строка (если выбрать Кириллицу(Windows) из списка):
.TextFilePlatform = 1251
получается .TextFilePlatform присваивается значение из второго столбца таблички кодировок.
а если макросом сделать
х = .TextFilePlatform
то X будет равняться 29 т.е. значению из первого столбца вышеприведенной таблицы, а мне нужно что бы X было присвоено значение из второго столбца (т.к. в другой версии екселя значение во второй колонке могут не совпадать со значиями из первой колонки вышеприведенной таблицы и макрос работать не будет в другом екселе.)


Что-то я совсем в тупике как решить данную проблему....
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 07.12.2011 в 19:57.
Snekich вне форума Ответить с цитированием
Старый 07.12.2011, 13:46   #3
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Попробуй так
Код:
X = Iif(.TextFilePlatform=29,1251,866)
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 07.12.2011, 14:16   #4
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Попробуй так
Код:
X = Iif(.TextFilePlatform=29,1251,866)
Ну так проблема то не решается т.к. кодировки 1251, 866 я только как пример привел, на самом то деле их 106 штук может быть. Конечно все 106 никогда не будут использоваться, на практике наверное с десяток из них.
Но плюс этот список кодировок не всегда одинаковый в разных виндоусах т.к. задается настройками в виндовз. Получается 29 (порядковый номер) , возможно, не будет соответствовать 1251 т.к. это я уже методом проб и ошибок выявил в своем екселе (в своем виндовсе)

Мне просто не верится, что нет способа в экселе решить эту проблему "универсальным" способом....
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 07.12.2011 в 16:16.
Snekich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание кнопки для импорта данных Anastasia666 Microsoft Office Access 2 28.06.2011 20:57
Обновление таблицы Access путем импорта данных из DBF TranzitZP Microsoft Office Access 9 11.04.2011 00:26
касательно импорта данных из Web Volodymyr Microsoft Office Excel 3 14.02.2011 13:38
HELP! Необходим скрипт на VB, автоматизирующий стандартную процедуру импорта из текстового файла Kerguru Microsoft Office Access 1 17.12.2009 20:33