Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 06.12.2011, 16:12   #1
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Адрес: Челябинск
Сообщений: 116
Репутация: 10

icq: 9126068
По умолчанию Нюансы импорта данных из файла. Как задать кодировку?

Сначала суть работы файла:
Есть несколько 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 Кб, 15 просмотров)

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

icq: 9126068
По умолчанию

Я уже сделал вот такую табличку из 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
 
Регистрация: 15.02.2009
Адрес: Украина Павлоград
Сообщений: 753
Репутация: 64
По умолчанию

Попробуй так
Код:

X = Iif(.TextFilePlatform=29,1251,866)

__________________
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума   Ответить с цитированием
Старый 07.12.2011, 14:16   #4
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Адрес: Челябинск
Сообщений: 116
Репутация: 10

icq: 9126068
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Попробуй так
Код:

X = Iif(.TextFilePlatform=29,1251,866)

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание кнопки для импорта данных 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 14:38
HELP! Необходим скрипт на VB, автоматизирующий стандартную процедуру импорта из текстового файла Kerguru Microsoft Office Access 1 17.12.2009 21:33


12:23.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru