Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Проблем с Ексел при четене от ТХТ файл с UTF-8 кодировка


Препоръчан отговор

С приятел направихме Ексел таблица за направа на заявки за разкрой на детайли. За съжаление той почина за няма и една седмица от Covid. Преди да помоля за помощ доста порових из нета, но не успях да се справя. Ако ТХТ файла е в ANSI кодировка всичко си е ОК. Но 64 битовата версия на програмата, която се ползва за детайлите прави ТХТ файл с UTF-8 кодировка и всичко излиза ма маймуница ( не се чете ). Намерих това:

Sub RangeToANSI()
    Dim c As CellFormat
    Application.ScreenUpdating = False
    For Each c In Selection
        c.Value = ToANSI(c.Value)
    Next c
    Application.ScreenUpdating = True
End Sub

При стартирането му казва, че ToANSI  не е дефинирано.

Трябва ми макрос, който да проверява формата ( кодировката ) на клетките в активния лист в диапазона - клетки А1:N до максималния брой с редове в които има данни и ако са UTF-8 кодировка да ги конвертира в ANSI.

Моля за помощ от тези, които разбират и желаят да помогнат.

Линк към коментара
Сподели в други сайтове

Линк към коментара
Сподели в други сайтове

Благодаря за линка. Разгледах го има какво да науча от него и ще го разгледам по-обстойно, но не ми върши работа за случая.  Аз пробвах друг вариант и работи. Отварям с Нотпад ТХТ файла и му давам запиши като. Показва, че кодировката му е UTF-8 .....сменям я на ANS и записвам. Отварям файла с програмата и всичко е ОК. Работи си.   Целта ми в случая е да се избегнат тези допълнителни гимнастики а с макрос да се оправи кодировката.

Линк към коментара
Сподели в други сайтове

преди 10 минути, milenk написа:

Целта ми в случая е да се избегнат тези допълнителни гимнастики а с макрос да се оправи кодировката.

Не стана ясно - това единичен случай ли е (имате определен брой файлове) или ще обработвате неопределено количество файлове - които ще получават е от ... някъде.

Пп. В LibreOffice (в момента ползвам него - MS Office е на другата щайга) има „Настройка“ -> „Съвместимост за HTML“. Там може да се избере „Знаков набор“ между една камара варианти.

Линк към коментара
Сподели в други сайтове

Текстовите файлове ще се получават от различни места. Има си бутонче с макрос за отваряне на ТХТ файл. Кликаш на бутона и се отваря формата за избор на файл за четене и копиране на данните от него. Ако е в кодировка  ANSI всичко си е на ред . Но Ако е UTF-8 се получава мяймуница.

Направих кратко видео за да се види начина на работа и резултатите. Началото е с файл с ANSI кодировка а след това в с  UTF-8 и се получава мяймуница.

https://dox.abv.bg/download?id=771067df37#

Линк към коментара
Сподели в други сайтове

преди 5 часа, milenk написа:

Текстовите файлове ще се получават от различни места. Има си бутонче с макрос за отваряне на ТХТ файл. Кликаш на бутона и се отваря формата за избор на файл за четене и копиране на данните от него.

А не може ли просто „File" -> „Open“ и да си отвориш *.txt файла? А после да копираш съдържанието!

Линк към коментара
Сподели в други сайтове

  • 3 седмици по-късно...
Това е  макрос, който  работи. Напреднах доста и вече всичко заработи.
Сблъсках се с два проблема които не мога да реша.
 
1. Да търси файловете за четене в следния път:
   ThisWorkbook.Path в папката "Поръчки" и да се избират файлове за четене от нея.
2. Като се стартира макроса за избор на файл за четене, ако се откаже избор на файл и дава грешка.
   Листа DataTxtFile остава отворен и трябва да се рестартира програмата.
 
Sub KopyKat()
    Dim sd As Worksheet, rd As Range
    Set sd = ThisWorkbook.Sheets("DataTxtFile")
    Set rd = sd.Range("A1")
    filespec = Application.GetOpenFilename()
    Set Wb = Workbooks.Open(FileName:=filespec)
    Wb.Activate
    Cells.Copy rd
    Wb.Close
    Range("A1").Select
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), 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, 2), _
        Array(7, 1)), TrailingMinusNumbers:=True
    Range("A1").Select
End Sub

 

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване