Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сохранение файла в Юникод UTF-8 - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сохранение файла в Юникод UTF-8 (Макросы/Sub)
Сохранение файла в Юникод UTF-8
emkub Дата: Вторник, 12.04.2016, 21:33 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Снова здравствуйте!
Уже несколько раз за последний год пытался реализовать затею, но всё безрезультатно...
Требуется сохранить файл экселя в формат CSV, кодировка - Юникод (UTF-8), разделитель поля - ","(запятая), разделитель текста - " (кавычка). Это описание взял из OpenOffice. Файл нужно всегда сохранять с одним и тем же именем в одном и том же месте (т.е. нужно убрать запрос экселя на замену этого файла).
Стандартные варианты сохранения экселя я перебрал, и ни один из них не подходит.
Сейчас для сохранения в нужной кодировке пользуюсь OpenOffice. Конечный файл нужен для загрузки на сайт.
Если эта тема уже поднималась (я не нашёл) - тыкните пальцем пожалуйста.
P.S. Сейчас пишу замученный, так что если описал непонятно - скажите. Я исправлюсь :)
К сообщению приложен файл: 3159669.xlsx(15Kb)


Сообщение отредактировал emkub - Вторник, 12.04.2016, 21:46
 
Ответить
СообщениеСнова здравствуйте!
Уже несколько раз за последний год пытался реализовать затею, но всё безрезультатно...
Требуется сохранить файл экселя в формат CSV, кодировка - Юникод (UTF-8), разделитель поля - ","(запятая), разделитель текста - " (кавычка). Это описание взял из OpenOffice. Файл нужно всегда сохранять с одним и тем же именем в одном и том же месте (т.е. нужно убрать запрос экселя на замену этого файла).
Стандартные варианты сохранения экселя я перебрал, и ни один из них не подходит.
Сейчас для сохранения в нужной кодировке пользуюсь OpenOffice. Конечный файл нужен для загрузки на сайт.
Если эта тема уже поднималась (я не нашёл) - тыкните пальцем пожалуйста.
P.S. Сейчас пишу замученный, так что если описал непонятно - скажите. Я исправлюсь :)

Автор - emkub
Дата добавления - 12.04.2016 в 21:33
wild_pig Дата: Вторник, 12.04.2016, 22:48 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 458
Репутация: 85 ±
Замечаний: 0% ±

2003, 2013
[vba]
Код
Sub uuu()
    Dim a(), b(), c()
    Dim i&, j&
    Dim txt$, sFile$
'---------------------
    sFile = "путь к файлу"
    
    a = ActiveSheet.UsedRange.Value
    
    ReDim c(1 To UBound(a))
    
    For i = 1 To UBound(a)
        ReDim b(1 To UBound(a, 2))
        For j = 1 To UBound(a, 2)
            b(j) = a(i, j)
        Next
        c(i) = Join(b, ",")
    Next
    
    With CreateObject("ADODB.Stream")
        .Type = 2
        .Charset = "utf-8"
        .Open
        .WriteText Join(c, vbCrLf)
        .SaveToFile sFile, 2
        .Close
    End With
    
    Beep
    MsgBox "А ты боялась"
End Sub
[/vba]


Сообщение отредактировал wild_pig - Вторник, 12.04.2016, 23:28
 
Ответить
Сообщение[vba]
Код
Sub uuu()
    Dim a(), b(), c()
    Dim i&, j&
    Dim txt$, sFile$
'---------------------
    sFile = "путь к файлу"
    
    a = ActiveSheet.UsedRange.Value
    
    ReDim c(1 To UBound(a))
    
    For i = 1 To UBound(a)
        ReDim b(1 To UBound(a, 2))
        For j = 1 To UBound(a, 2)
            b(j) = a(i, j)
        Next
        c(i) = Join(b, ",")
    Next
    
    With CreateObject("ADODB.Stream")
        .Type = 2
        .Charset = "utf-8"
        .Open
        .WriteText Join(c, vbCrLf)
        .SaveToFile sFile, 2
        .Close
    End With
    
    Beep
    MsgBox "А ты боялась"
End Sub
[/vba]

Автор - wild_pig
Дата добавления - 12.04.2016 в 22:48
emkub Дата: Вторник, 12.04.2016, 23:00 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
MsgBox "А ты боялась"
hands

Может быть чуть ближе, но не то... Сейчас голова не соображает толком.
НО! заменив Join(b, "-") на Join(b, ",") я получил БОЛЕЕ весомый результат. Теперь разбивка идёт, но каждая запятая считается началом следующей ячейки...
 
Ответить
Сообщение
MsgBox "А ты боялась"
hands

Может быть чуть ближе, но не то... Сейчас голова не соображает толком.
НО! заменив Join(b, "-") на Join(b, ",") я получил БОЛЕЕ весомый результат. Теперь разбивка идёт, но каждая запятая считается началом следующей ячейки...

Автор - emkub
Дата добавления - 12.04.2016 в 23:00
Karataev Дата: Вторник, 12.04.2016, 23:07 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 643
Репутация: 227 ±
Замечаний: 0% ±

Excel
emkub, Excel умеет сохранять файлы в csv-формат только в формате ANSI. Это означает, что если у Вас в тексте есть юникод символы, то они будут заменены на знаки вопроса. В этом случае Excel Вам не поможет и Вам нужно самому писать макрос (или искать в интернете), который будет переводить Excel файл в csv-формат с учетом разделителей строк.
Если же у Вас в Excel файле нет символов юникода, то сначала сохраните с помощью Excel в csv-формат (в ANSI-кодировке), а затем уже используйте объект "ADODB.Stream" (этот объект упоминается в сообщении выше) для перекодировки в UTF-8.


 
Ответить
Сообщениеemkub, Excel умеет сохранять файлы в csv-формат только в формате ANSI. Это означает, что если у Вас в тексте есть юникод символы, то они будут заменены на знаки вопроса. В этом случае Excel Вам не поможет и Вам нужно самому писать макрос (или искать в интернете), который будет переводить Excel файл в csv-формат с учетом разделителей строк.
Если же у Вас в Excel файле нет символов юникода, то сначала сохраните с помощью Excel в csv-формат (в ANSI-кодировке), а затем уже используйте объект "ADODB.Stream" (этот объект упоминается в сообщении выше) для перекодировки в UTF-8.

Автор - Karataev
Дата добавления - 12.04.2016 в 23:07
emkub Дата: Вторник, 12.04.2016, 23:13 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Познавательно. Благодарю. Завтра буду читать и экспериментировать.
 
Ответить
СообщениеПознавательно. Благодарю. Завтра буду читать и экспериментировать.

Автор - emkub
Дата добавления - 12.04.2016 в 23:13
wild_pig Дата: Вторник, 12.04.2016, 23:36 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 458
Репутация: 85 ±
Замечаний: 0% ±

2003, 2013
[vba]
Код
For i = 1 To UBound(a)
        ReDim b(1 To UBound(a, 2))
        For j = 1 To UBound(a, 2) 'проходим по элементам строки
            If Not IsNumeric(a(i, j)) And Not IsDate(a(i, j)) Then 'если не число и не дата то
                    b(j) = """" & a(i, j) & """" 'добавляем кавычи слева и справа
            Else 'если число или дата
                b(j) = a(i, j) 'оставляем значение без изменений
            End If
        Next
        c(i) = Join(b, ",")
    Next
[/vba]


Сообщение отредактировал wild_pig - Среда, 13.04.2016, 11:48
 
Ответить
Сообщение[vba]
Код
For i = 1 To UBound(a)
        ReDim b(1 To UBound(a, 2))
        For j = 1 To UBound(a, 2) 'проходим по элементам строки
            If Not IsNumeric(a(i, j)) And Not IsDate(a(i, j)) Then 'если не число и не дата то
                    b(j) = """" & a(i, j) & """" 'добавляем кавычи слева и справа
            Else 'если число или дата
                b(j) = a(i, j) 'оставляем значение без изменений
            End If
        Next
        c(i) = Join(b, ",")
    Next
[/vba]

Автор - wild_pig
Дата добавления - 12.04.2016 в 23:36
emkub Дата: Среда, 13.04.2016, 10:50 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Вот что называется ГЕНИЙ!
wild_pig, большое спасибо!
Несколько раз прогнал этот макрос - вроде полёт нормальный! Сейчас остался один несущественный вопрос :)
В конце такой строки <br><span style="color:#fff9f6;">[showyamap][placemark address="Киев Радунская 42/10 "/][/showyamap]</span> появляется кавычка ("). Ни на что вроде пока не влияет, но любопытно!
 
Ответить
СообщениеВот что называется ГЕНИЙ!
wild_pig, большое спасибо!
Несколько раз прогнал этот макрос - вроде полёт нормальный! Сейчас остался один несущественный вопрос :)
В конце такой строки <br><span style="color:#fff9f6;">[showyamap][placemark address="Киев Радунская 42/10 "/][/showyamap]</span> появляется кавычка ("). Ни на что вроде пока не влияет, но любопытно!

Автор - emkub
Дата добавления - 13.04.2016 в 10:50
wild_pig Дата: Среда, 13.04.2016, 11:49 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 458
Репутация: 85 ±
Замечаний: 0% ±

2003, 2013
Намудрил я что-то с кодом, исправил.
Одна кавычка не может появиться, они парой добавляются, если в ячейке текст. Текст надо чистить от переносов строк или менять, если они надо, на теги.


Сообщение отредактировал wild_pig - Среда, 13.04.2016, 11:51
 
Ответить
СообщениеНамудрил я что-то с кодом, исправил.
Одна кавычка не может появиться, они парой добавляются, если в ячейке текст. Текст надо чистить от переносов строк или менять, если они надо, на теги.

Автор - wild_pig
Дата добавления - 13.04.2016 в 11:49
emkub Дата: Среда, 13.04.2016, 12:17 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Из того, что нашёл:
-убрал проверку "если дата" - в таблице есть колонка с датой. После исправления дата появилась.
-самая первая ячейка стала отображаться в кавычках.

со своим предыдущим сообщением на счёт одной кавычки буду разбираться дальше....
 
Ответить
СообщениеИз того, что нашёл:
-убрал проверку "если дата" - в таблице есть колонка с датой. После исправления дата появилась.
-самая первая ячейка стала отображаться в кавычках.

со своим предыдущим сообщением на счёт одной кавычки буду разбираться дальше....

Автор - emkub
Дата добавления - 13.04.2016 в 12:17
emkub Дата: Среда, 13.04.2016, 15:48 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Да это прям наваждение!
Если кто может - объясните пожалуйста. Макрос отрабатывает на Ура! Всё, файл сохранён в нужном виде, всё красиво и чётко. НО! При открытии этого файла ОпенОфисом, Первая ячейка отображается в кавычках... Только первая, больше никакие. При открытии Экселем - наоборот: фраза из первой ячейки без кавычек, а все остальные в кавычках (так и должно быть в оригинале). Это портит картину Мира!
Если убрать кавычки - тупо пропадает информация из всего первого столбца. Если их оставить - информация сохраняется но не распознаётся как ей положено.
Я в растерянности.


Сообщение отредактировал emkub - Среда, 13.04.2016, 16:04
 
Ответить
СообщениеДа это прям наваждение!
Если кто может - объясните пожалуйста. Макрос отрабатывает на Ура! Всё, файл сохранён в нужном виде, всё красиво и чётко. НО! При открытии этого файла ОпенОфисом, Первая ячейка отображается в кавычках... Только первая, больше никакие. При открытии Экселем - наоборот: фраза из первой ячейки без кавычек, а все остальные в кавычках (так и должно быть в оригинале). Это портит картину Мира!
Если убрать кавычки - тупо пропадает информация из всего первого столбца. Если их оставить - информация сохраняется но не распознаётся как ей положено.
Я в растерянности.

Автор - emkub
Дата добавления - 13.04.2016 в 15:48
emkub Дата: Среда, 13.04.2016, 16:22 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Может ли быть дело в заголовке BOM (Byte Order Mark)?
 
Ответить
СообщениеМожет ли быть дело в заголовке BOM (Byte Order Mark)?

Автор - emkub
Дата добавления - 13.04.2016 в 16:22
doober Дата: Среда, 13.04.2016, 17:02 | Сообщение № 12
Группа: Друзья
Ранг: Обитатель
Сообщений: 315
Репутация: 177 ±
Замечаний: 0% ±

Excel 2007
Попробуйте записать без бома




Сообщение отредактировал doober - Среда, 13.04.2016, 23:30
 
Ответить
СообщениеПопробуйте записать без бома

Автор - doober
Дата добавления - 13.04.2016 в 17:02
emkub Дата: Среда, 13.04.2016, 18:03 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
благодарю! сегодня вечером попробую...
 
Ответить
Сообщениеблагодарю! сегодня вечером попробую...

Автор - emkub
Дата добавления - 13.04.2016 в 18:03
emkub Дата: Среда, 13.04.2016, 20:54 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Doober, извините за мою неграмотность, но я не знаю, как пользоваться Функциями. Подскажите пожалуйста.
 
Ответить
СообщениеDoober, извините за мою неграмотность, но я не знаю, как пользоваться Функциями. Подскажите пожалуйста.

Автор - emkub
Дата добавления - 13.04.2016 в 20:54
emkub Дата: Среда, 13.04.2016, 22:40 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Выход из положения нашёл, но, что называется "через ..опу" - просто добавил первый пустой столбец с пробелом в первой ячейке (А1).
Но ведь это не решение.
 
Ответить
СообщениеВыход из положения нашёл, но, что называется "через ..опу" - просто добавил первый пустой столбец с пробелом в первой ячейке (А1).
Но ведь это не решение.

Автор - emkub
Дата добавления - 13.04.2016 в 22:40
doober Дата: Среда, 13.04.2016, 23:41 | Сообщение № 16
Группа: Друзья
Ранг: Обитатель
Сообщений: 315
Репутация: 177 ±
Замечаний: 0% ±

Excel 2007
Можно и через правильное место

вид в йопен офисе
К сообщению приложен файл: 7836029.jpg(46Kb)




Сообщение отредактировал doober - Среда, 13.04.2016, 23:42
 
Ответить
СообщениеМожно и через правильное место

вид в йопен офисе

Автор - doober
Дата добавления - 13.04.2016 в 23:41
emkub Дата: Четверг, 14.04.2016, 10:41 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Ну что ж, теперь могу отписаться.
В целом, последний код Doobera работает. Сохранение правда не такое качественное, как через ОпенОфис. При сохранении макросом, мой загрузчик CSV-файлов спотыкается о встречающуюся в тексте комбинацию кавычка-запятая (",) . Но это уже будет вопрос к форматированию текста.

Так что вопрос можно считать решённым.
Всё-таки дело было в злосчастном ВОМе?

wild_pig, Doober, Вам большое спасибо!
 
Ответить
СообщениеНу что ж, теперь могу отписаться.
В целом, последний код Doobera работает. Сохранение правда не такое качественное, как через ОпенОфис. При сохранении макросом, мой загрузчик CSV-файлов спотыкается о встречающуюся в тексте комбинацию кавычка-запятая (",) . Но это уже будет вопрос к форматированию текста.

Так что вопрос можно считать решённым.
Всё-таки дело было в злосчастном ВОМе?

wild_pig, Doober, Вам большое спасибо!

Автор - emkub
Дата добавления - 14.04.2016 в 10:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сохранение файла в Юникод UTF-8 (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!