Как в node js поставить кодировку геа 8 для excel
У меня есть файл Excel, который имеет некоторые испанские символы(Тильды и т. д.) что мне нужно преобразовать в файл CSV для использования в качестве файла импорта. Однако, когда я сохраняю как CSV, он искажает "специальные" испанские символы, которые не являются символами ASCII. Кажется, что это также происходит с левыми и правыми кавычками и длинными тире, которые, как представляется, исходят от исходного пользователя, создающего файл Excel в Mac.
поскольку CSV - это просто текстовый файл, я уверен, что он может обрабатывать кодировку UTF8, поэтому я предполагая, что это ограничение Excel, но я ищу способ получить из Excel в CSV и сохранить символы, отличные от ASCII.
простой обходной путь-использовать электронную таблицу Google. Вставьте (значения, только если у вас есть сложные формулы) или импортируйте лист, а затем загрузите CSV. Я просто попробовал несколько персонажей, и это работает довольно хорошо.
Примечание: Google листы имеют ограничения при импорте. См.здесь.
Примечание: будьте осторожны с конфиденциальными данными с Google листов.
EDIT:другая альтернатива - в основном они используют макрос VB или addins для принудительного сохранения как В utf8. Я не пробовал ни одного из этих решений, но они звучат разумно.
Я нашел OpenOfficeприложение электронной таблицы, Calc, действительно хорошо обрабатывает данные CSV.
в "Сохранить как. "диалог, нажмите "Параметры формата", чтобы получить различные кодировки для CSV. LibreOffice работает так же, как AFAIK.
сохраните лист Excel как " Unicode Text (.формат txt.") Хорошей новостью является то, что все международные символы находятся в UTF16 (обратите внимание, не в UTF8). Однако новое"*.файл " txt " имеет разделители табуляции, а не запятые, и поэтому не является истинным CSV.
(необязательно) если вы не можете использовать файл с разделителями табуляции для импорта, используйте свой любимый текстовый редактор и замените символы табуляции запятыми ",".
импортировать *.txt файл в целевое приложение. Убедитесь, что он может принять формат UTF16.
Если UTF-16 был правильно реализован с поддержкой кодовых точек, отличных от BMP, то вы можете конвертировать файл UTF-16 в UTF-8 без потери информации. Я предоставляю вам найти ваш любимый способ сделать это.
Я использую эту процедуру для импорта данных из Excel в Moodle.
Я знаю, что это старый вопрос, но я случайно наткнулся на этот вопрос, борясь с теми же проблемами, что и OP.
не найдя ни одного из предлагаемых решений жизнеспособным вариантом, я решил выяснить, есть ли способ сделать это только с помощью Excel.
к счастью, я обнаружил, что проблема потерянного символа происходит только (в моем случае) при сохранении из формата xlsx в формат csv. Сначала я попытался сохранить файл xlsx в xls, а затем в csv. Это на самом деле работал.
пожалуйста, дайте ему попробовать и посмотреть, если это работает для вас. Удача.
можно использовать iconv команда под Unix (также доступна в Windows как libiconv).
после сохранения в CSV под Excel в командной строке ставим:
(Не забудьте заменить cp1250 вашей кодировкой).
работает быстро и отлично подходит для больших файлов, таких как база данных почтовых кодов, которые не могут быть импортированы в GoogleDocs (предел 400.000 ячеек).
единственный "простой способ" сделать это заключается в следующем. Во-первых, поймите, что есть разница между тем, что отображается и что скрывается в Excel .CSV-файл.
(1) откройте файл Excel, где у вас есть информация (.XLS, а также .файлы XLSX)
(2) в Excel выберите " CSV (с разделителями-запятыми) (*.csv) как тип файла и сохранить как этот тип.
(3) в блокноте (найдено в разделе "программы", а затем аксессуары в Start меню), откройте сохраненный .CSV-файл в блокноте
(4) затем выберите - > Сохранить как..и в нижней части окна" сохранить как "есть поле выбора, помеченное как"кодировка". Выберите UTF-8 (Не используйте ANSI или вы потеряете все акценты и т. д.). После выбора UTF-8 сохраните файл в несколько отличающемся от исходного имени.
этот файл находится в UTF-8 и сохраняет все символы и акценты и может быть импортирован, например, в MySQL и другую базу данных программы.
этот ответ взят из этот форум.
еще один, который я нашел полезным: "цифры " позволяет настройки кодирования при сохранении в формате CSV.
вы можете сделать это на современной машине Windows без стороннего программного обеспечения. Этот метод надежен и будет обрабатывать данные, которые включают кавычки, символы табуляции, символы CJK и т. д.
1. Сохранить из Excel
в Excel сохраните данные в file.txt С помощью типа Unicode Text (*.txt) .
2. Запустить PowerShell
Run powershell из меню "Пуск".
3. Загрузить файл в В PowerShell
4. Сохраните данные как CSV
" nevets1219 "прав насчет Google docs, однако если вы просто" импортируете " файл, он часто не конвертирует его в UTF-8.
но если вы импортируете CSV в существующую электронную таблицу Google, она преобразуется в UTF-8.
полученный файл будет в UTF-8
для тех, кто ищет полностью программное (или, по крайней мере, серверное) решение, я имел большой успех, используя инструмент xls2csv catdoc.
установить конверотора catdoc, преобразующего файлы:
это очень быстро.
обратите внимание, что важно, чтобы вы включили -d utf-8 флаг, иначе он будет кодировать вывод по умолчанию cp1252 кодировка, и вы рискуете потерять информацию.
обратите внимание, что xls2csv также работает только с .xls файлы, он не работает с .xlsx файлы.
Никак не получается изменить кодировку, у меня есть парсер, выводит информацию в консоль в нормальном виде (кодировка либо CP1251, либо CP1252), но эту информацию мне надо отправлять в телеграмм по API. Мне вылазит ошибка, что кодировка должна быть UTF-8.
Если делать так:
то выводит иероглифы
Если у тебя iconv-lite то думаю надо так сделать - var message = iconv.decode(message, "cp1251"); var message = iconv.encode(message, "utf8").toString();
надо смотреть что не так с телеграмом , если строка UTF8 то проблем быть не должно. Два раза потому что сначала мы как-бы преобразовываем в свой формат, а потом из него делаем ту кодировку которая нужна
2 ответа 2
Вот простой пример для iconv-lite
Создал PHP файл на своем сервере. Кодировка файла UTF-8. Направляю через request get - запрос с var message = iconv.encode(iconv.decode("Привет", "cp1251"), "utf8").toString(); Выводит %1F@825B
что за PHP?, тут же js. По поводу строки "%1F@825B" надо смотреть как она передаётся. Без более полного кода сложно сказать где возникает проблема.
Ответ, отмеченный, как принятый -- полный привет логике, и полное досвидание производительности.
Проблема решается неочевидно. Помимо кодировки исходника (исходные данные на источнике), многое зависит от того, каким инструментом забираете источник: node-fetch , request , axios , unirest . В случае, если данные читаются из файла, там данное решение тоже пройдет, но. там отдельная история.
Суть проблемы в том, что Привет может прилететь и из заголовков ( headers ) ответа ( response ) и даже из содержимого ответа (в случае XML -- обязательно). Я двое суток смотрел на буквы э на местах всех кириллических знаков, пока не расковырял исходники всех этих фетчей и реквестов, которые думать не думают о других кодировках, кроме utf8 и других форматах данных, кроме json , и то -- JSON обязательно должен быть utf8 , даже Unicode ему нельзя быть. Как в песенке про папу, который может быть кем угодно, но мамой не может быть. Хуже всего, если все-таки -- думают, но полагают, что все решено.
Далее, важно в какой консоли вы смотрите ответы Ноды: Windows (XP, Vista, 7|8, 10 - ждут сюрпризы), xterm? У Вас LINUX! О! Как хорошо, что Вы не знаете, что такое KOI-8, а Ваши учителя даже про KOI-7. Относительно ровно предсказать вывод без танцев с большим шаманским бубном можно в консолях RHEL^7(CentOs^7, Fedora^17), Ubuntu^12, MacOs^X. С другими не знаком, либо неоднозначно.
Еще вопрос - удалённо если смотрите на терминал, то какой протокол, какой терминальный клиент? Допустим, что с терминалом и кодировками на терминале хорошо.
Вот рабочий макет для песочницы. Просто поиграйтесь с вариантами (ответы функции cnw8 ), которых на просторах интернетов вагон. Почти все они -- неправильные, работают только два: один здесь, а другой у Майкла Джексона.
A full featured xlsx file generation library allowing for the creation of advanced Excel files.
excel4node conforms to the ECMA-376 OOXML specification 2nd edition
excel4node comes with some generic functions and types
xl.getExcelRowCol(cellRef)
Accepts cell reference (i.e. 'A1') and returns object with corresponding row and column
xl.getExcelAlpha(column)
Accepts column as integer and returns corresponding column reference as alpha
xl.getExcelCellRef(row, column)
Accepts row and column as integers and returns Excel cell reference
xl.getExcelTS(date)
Accepts Date object and returns an Excel timestamp
An instance of the Workbook class contains all data and parameters for the Excel Workbook.
Workbook constructor accepts an optional configuration object.
wb.addWorksheet(name, options);
Adds a new Worksheet to the Workbook
Accepts name of new Worksheet and options object (see Worksheet section)
Returns a Worksheet instance
wb.setSelectedTab(id);
Sets which tab will be selected when the Workbook is opened
Accepts Sheet ID (1-indexed sheet in order that sheets were added)
wb.createStyle(opts);
Creates a new Style instance
Accepts Style configuration object (see Style section) Returns a new Style instance
wb.writeToBuffer();
The writeToBuffer() method access no parameters and returns a promise that resolves with the nodebuffer generated by the JSZip library. This buffer can then be sent to other streams.
An instance of the Worksheet class contains all information specific to that worksheet
Worksheet constructor is called via Workbook class and accepts a name and configuration object
Full Worksheet options. All options are optional.
Note: headerFooter strings accept Dynamic Formatting Strings. i.e. '&L&A&C&BCompany, Inc. Confidential&B&RPage &P of &N'
Worksheet data validations
ws.addDataValidation();
Accepts a validation options object with these available options. All options are optional with exception of sqref.
Worksheet Conditional Formatting
Conditional formatting adds custom formats in response to cell reference state. A subset of conditional formatting features is currently supported by excel4node.
Formatting rules apply at the worksheet level.
The following example will highlight all cells between A1 and A10 that contain the string "ok" with bold, green text:
The only conditional formatting type that is currently supported is expression.
When the formula returns zero, conditional formatting is NOT displayed. When the formula returns a nonzero value, conditional formatting is displayed.
Worksheet Page Breaks
Worksheet page breaks can be added at rows and columns
ws.addPageBreak(type, position) where type is row or column and position is the last row/column before the page break.
Worksheet Print Area
Worksheet print areas can be set
ws.setPrintArea(startRow, startCol, endRow, endCol) where parameters are numbers corresponding to print area
Rows and Columns
Set custom widths and heights of columns/rows
Set rows and/or columns to create a frozen pane with an optionall scrollTo
Add Filters to a row If not options are given to the filter function, a filter will be added to all columns that contain data. Optionally, if you wish to restrict your filter to a specific range, you can specify start and end rows and columns for that range. The filter row should be included in this range.
Hide a row or column
Create groupings of rows or columns and optionally state to collapse the grouping
Multiple groupings can be nested as demonstrated in this gist
Style objects can be applied to Cells
Any combination of style values can be set
Creating a preset style is much more efficient than applying styles to individual cells
Comments can be added to cells with some options
Adds and image to the worksheet.
currently on 'picture' type is supported
positioning has 3 types, 'absoluteAnchor', 'oneCellAnchor', 'twoCellAnchor'
absoluteAnchor takes two position elements in either EMUs or measurements in cm, mm, or in
x:0, y:0 is top left corner of worksheet
oneCellAnchor and twoCellAnchor types will take positional objects:
position type of oneCellAnchor will take a single "from" position
position type of twoCellAnchor will take a "from" and "to" position
specifying a twoCellAnchor will automatically adjust the image to fit within the bounds of the two anchors.
@kain Сохранил в txt, переименовал в csv, открыл в Excel, результат:
файл 1.txt
Переименованный файл 1.csv
Так что перекодировать всё равно приходится
@fox
А как указать путь чтоб брало файл с диска С:papka и ставило туда-же после перекодирования?
В Вашем примере работает только когда исходный файл лежит в папке AppData\Roaming\BrowserAutomationStudio\apps\21.0.1\
если там его нету то какие пути не указывай - не работает
пробывал так iconv -t WINDOWS-1251 -f UTF-8 C:\test\1.csv > "C:\test\1.csv"
может что не то делаю?
Записывает C:\test\1.csv нормально после перекодировки пустой файл
@avtopars Вы посмотрите внимательнее, я сам этот файл создаю в директории
и потом его конвертирую в нужную папку.
пробывал так iconv -t WINDOWS-1251 -f UTF-8 C:\test\1.csv > "C:\test\1.csv"
Нужно сохранять в другой файл. Можете поменять папку и сохранять с этим же именем
Мда. 2 дня гемора и наконец решение,мож кому-то тоже пригодится.
Суть такая
Проект от @fox работает,делаю вроде все так-же но ничего не работает.
Вместо нужного результата после смены кодировки получаю свой файл но он пустой 0 байт.
Создал новый проект чистый делаю все с нуля все работает, возвращаюсь в старый проект и тут вроде все также но не пашет и все тут.
Решение оказалось банальным в старом проекте в названии файла было пару слов и из-за пробелов нечего не работало. Если файл 1 слово все прекрасно конвертируется.
Логичный вопрос как решить проблему пробелов? Вернее как писать название файлов с пробелами так чтоб утилита это понимала?
@avtopars Действие "выполнить процесс" по сути создаёт bat файл и выполняет его, грубо говоря. А в командной строке если в пути встречается кирилица или пробелы, его обрамляют в кавычки. По сути можно любой путь обрамлять в кавычки, на всякий случай и всё.
@fox
Вы говорили что пользуетесь утилиткой давно,а проблем не возникало с конвертацией?
У меня почему-то она обрезает файл
Например csv оригинал имеет 130 строк выходной подрезает и получается 100 или 25-75 как получится.
от чего зависит не знаю но факт такой есть и это точно она делает,а не бас и ничто другое.
Кстати не всегда иногда и полный файл выдает
Вы говорили что пользуетесь утилиткой давно
Где я такое говорил?
Например csv оригинал имеет 130 строк выходной подрезает и получается 100 или 25-75 как получится.
В общем проблема более менее понятна.
Встречаются разные символы на источнике которые утилита не читает или не понимает, если их заменять на что-то тогда конвертится нормально без обрезок.
Символы которые встречаются в разных случаях разные,тут помоему общего решения нет. В каждом отдельном случае нужно смотреть на чем затык и добавлять его в обработку
Как пример слова не нашего алфавита Pułaskiego Namysłów
ну и вот на символах ł ó и будет обрезка
Ну и символы типа 89×65×92 см где встретится × там и порежет
@fox может есть мысли по поводу решения проблемы?
Обратился к разработчику за помощью в решении проблемы с конвертацией.
Выложу это тут для будущих поколений ))
Через node js проблема решается полностью, для работы нужно поставить модуль encoding
Следующий код решает проблемы
Код если пути у нас в переменных
Отдельная благодарность @fox за участие и консультации
@avtopars Пасиб, не только будущих но и счас. В лайв хаки можно смело. Правда с "узлами" не все дружат.. Пойдут вопросы как))
@fox возможно это только в лайброфис.
Сейчас новый прикол) Конвертирую после каждой записи и сейчас перестал дописывать сконвертированный файл после того, как он начинает весить где-то 13кб) Хрен знает почему)
@fox Перезаписываю кодировку файла csv по вашему проекту. Почему то перезаписывается только первая строчка, а остальные удаляются.
Сработал вариант @avtopars при сохранении.
Но потом когда BAS открывает заново этот файл он уже нечитаем.
Как его при открытии сконвертировать обратно в UTF-8
Пробовал заменить этот же вариант так:
Node.js - это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, которую также можно использовать для чтения из файла и записи в файл, который может быть в формате txt, ods, xlsx, docx и т. Д.
В следующем примере показано, как файл Excel (.xlsx) считывается из файла Excel и затем конвертируется в JSON, а также для записи в него. Это может быть достигнуто с помощью пакета под названием xlsx для достижения нашей цели.
Установка модуля: вы можете установить модуль xlsx, используя следующую команду:
Примечание. В следующем примере text.xlsx - это файл фиктивных данных, который использовался.
Имя файла: test.xlsx
Лист 1:
Лист 2:
Таким образом, файл excel test.xlsx имеет 2 листа, на одном из которых указаны сведения о студенте, а на другом - сведения о лекторе.
Имя файла операции чтения: read.js
Javascript
Объяснение: Сначала модуль npm включается в файл read.js, а затем файл excel считывается в книгу, то есть постоянный файл в указанной выше программе.
Количество файлов в этом конкретном файле Excel доступно в свойстве SheetNames книги. Доступ к нему можно получить следующим образом:
Цикл for выполняется до конца файла Excel, начиная с первой страницы. Одной из наиболее важных функций, используемых в приведенном выше коде, является функция sheet_to_json (), присутствующая в модуле utils пакета xlsx. Он принимает объект книги в качестве параметра и возвращает массив объектов JSON.
Существует цикл forEach, который выполняет итерацию по каждому объекту JSON, присутствующему в массиве temp, и помещает его в переменные данные, которые будут содержать все данные в формате JSON.
Наконец, данные печатаются или любое другое изменение может быть выполнено в массиве объектов JSON.
Шаг для запуска приложения:
Запустите файл read.js, используя следующую команду:
Выход:
Операция записи В следующем примере мы преобразуем массив объектов JSON в лист Excel и добавим его в файл.
Читайте также: