Javascript прочитать excel файл

Обновлено: 04.07.2024

Я хотел бы знать, как читать данные из файла MS Excel 2003 с несколькими листами, используя только jquery. Я прочитал несколько решений для PHP /JQuery, ActiveX и т. Д., Но я хотел бы сделать это только с JQuery . Есть идеи, как это может работать?

Кстати, я работаю в FireFox 4 и мне не нужна поддержка разных браузеров.

Веб-компоненты Office предоставляют API-интерфейсы для работы с документами через javascript (или vb). Они плохо документированы, но для приложений типа интрасети они могут выполнить свою работу. Я использовал их для функциональности сводной таблицы в IE6 и не знаю, будет ли она работать с Firefox.

На самом деле это возможно без OWC и таких экзотических надстроек, но потребуется ручная работа. Другое дело - это выполнимо только на локальном компьютере - не ожидайте, что ваш рабочий лист будет работать как веб-сервер. Еще одна возможность - настроить его на общем сетевом ресурсе, но я не уверен, как все это будет работать в песочнице.

РЕДАКТИРОВАТЬ: я знаю, что вопрос был о формате Excel 2003. Тем не менее, все еще существуют запросы Google о той же функциональности, и сегодня люди используют версии MS Office 2010/2013. Поэтому я считаю, что ответ может быть полезен для читателя.

  1. Используя zip.js , вы можете открывать сжатые файлы. Это означает, что вы можете открывать файлы MS Office, начиная с Office 2007 (.docx, .xlsx и т. Д.). Старые офисные файлы имеют собственный формат, и вы не можете прочитать их как заархивированные файлы .
  2. После открытия файла становится доступной иерархическая структура папок с различными файлами. Сами данные находятся в /xl/worksheets/[worksheet name].xml и /xl/sharedStrings.xml , что означает, что вы должны откопать его с помощью анализатора XML и сопоставить его позже.
  3. К счастью, анализатор XML доступен в jQuery: $.parseXML('. ')

Я понимаю, что этот вопрос старый, но у меня есть базовый синтаксический анализатор, который поддерживает большую часть того, что вы просите:

Существует несколько инструментов (библиотек) для nodeJS, которые вы можете найти на сайте npm. Одна из них называется excel, которая читает файлы xlsx, и есть одна, которая называется office для большинства файлов ms office. Теперь, так как это все-таки Javascript, вы должны иметь возможность скачать и проверить источник, чтобы найти способ интегрировать его на стороне клиента. Надеюсь, это поможет

Преобразуйте Excel в CSV-файл, чтобы прочитать его из Jquery использовать плагин Jquery CSV2Table

На странице JSP мне нужно просмотреть файл Excel, и после выбора файла в системе мне нужно прочитать содержимое этого файла Excel и заполнить форму.

В настоящее время я пробовал с приведенным ниже кодом, но он работает только в IE с некоторыми изменениями в Internet Explorer для ActiveXObject. Это не работает в остальных браузерах.

Пожалуйста, предложите какое-нибудь решение, чтобы оно работало во всех браузерах.

Как правило, невозможно прочитать / записать любой файл через JavaScript в браузере. Поэтому без каких-либо дополнительных плагинов вы не сможете читать / записывать файлы Excel из браузера. ActiveX объекты Excel позволяют вам делать это, но только IE поддерживает объекты ActiveX.

Могут быть другие плагины для других браузеров, но я не знаю ни одного.

Во-первых, почему вы хотите это сделать? Можете ли вы привести пример использования? Возможно, есть лучшие варианты, чем то, что вы пытаетесь.

ОБНОВЛЕНИЕ

Вам нужно будет передать файл Excel на сервер и выполнить чтение файла Excel на стороне сервера (например, в сервлете).

Вам нужно будет использовать <input type='file'> в JSP в многочастной форме
<form name="myForm" action="myServlet" enctype="multipart/form-data" method="post">

На стороне сервера вы можете использовать загрузку файлов Apache Commons.

Когда у вас есть файл (или поток), вы можете проанализировать его, например, с помощью Apache POI HSSF / XSSF, а затем обновите данные в базе данных или передайте их обратно в JSP

Электронная таблица xlsx - это zip-файл с кучей xml-файлов. Используя что-то вроде zip.js, вы можете извлечь файлы XML и проанализировать их в браузере. xlsx.js делает это. Вот мой простой пример. Скопировано здесь для удобства:

Этот работает во всех основных браузерах.

В приведенном выше примере data являются необработанными строковыми данными. Его можно проанализировать в JSON со строгой схемой, передав аргумент schema . См. API документы для примера этого.

Я делаю это постоянно - мои прототипы предназначены для того, чтобы заинтересованные лица могли изменить Excel и заполнить его прототипом HTML, часто без сервера.

  1. Сохранить Excel как XML
  2. Загрузите XML через AJAX и проанализируйте структуру

( 1 ) вот полезный макрос кнопки, который я вставил в свои файлы Excel, что позволяет безболезненно сохранять его в формате XML (и повторно сохранять в формате xls):

( 2 ) Анализ JS более сложен, но предпосылка проста. Будут объекты XML, такие как «Рабочий лист», «Таблица», «Строка», «Ячейка» и «Данные». Есть также атрибут XML с именем ss: Index, который иногда мне кажется полезным.

Вы можете загрузить и открыть файл клиентской части в большинстве современных браузеров, используя Файловый API HTML5

После загрузки файла вы можете проанализировать содержимое с помощью библиотеки, которая поддерживает определенные выходные форматы Excel (например, csv / xlsx).

Как использовать JavaScript для чтения и экспорта файлов Excel в чистом виде

кSheetJSПроизведено js-xlsx Это очень удобная библиотека инструментов, которой для чтения и экспорта в Excel нужен только чистый JS. Она имеет мощные функции, поддерживает множество форматов и поддерживает xls 、 xlsx 、 ods (Собственный формат файлов таблицы OpenOffice) и более десятка форматов. Вся эта статья основана на xlsx Возьмем, к примеру, формат.

1.1. Совместимость


1.2. Как пользоваться

dist В каталоге много JS-файлов, обычно используйте xlsx.core.min.js довольно, xlsx.full.min.js Он содержит все функциональные модули.


непосредственный script Этикетка может быть введена:

Чтение в Excel происходит в основном через XLSX.read(data, ); Способ достижения, ответьте на звонок WorkBook Основные значения типа следующие:

2.1. Получить объект книги

2.1.1. Чтение локальных файлов

Непосредственно по коду:

2.1.2. Чтение сетевых файлов

2.2. Подробная рабочая тетрадь

2.2.1. Workbook Object

workbook Что в нем, распечатаем и посмотрим:


можно увидеть, SheetNames В нем сохраняются все названия листов, а затем Sheets Конкретное содержимое каждого листа сохраняется (мы называем это Sheet Object ). Каждый sheet Через что-то вроде A1 Такое значение ключа сохраняет содержимое каждой ячейки, и мы называем его объектом ячейки ( Cell Object ):


2.2.2. Sheet Object

Каждый Sheet Object Представляет форму, если она не ! Те, что в начале, указывают на обычные cell , В противном случае это означает какое-то особое значение, а именно:

  • sheet['!ref'] : Указывает диапазон всех ячеек, например, от A1 до F8, он записывается как A1:F8 ;
  • sheet[!merges] : Хранить некоторую информацию о слиянии ячеек, это массив, каждый массив состоит из s с e Составьте композицию объекта, s Значит старт, e Означает конец, r Представляет строку, c Представляет столбец;
  • и многое другое;

Что касается слияния ячеек, в принципе не проблема понять следующую картину:


Результаты приведены ниже:


2.2.3. Объект Cell

Каждая ячейка - это объект ( Cell Object ),Есть t 、 v 、 r 、 h 、 w И другие поля (см.Здесь):

  • t: указывает тип содержимого, s Представляет тип строки, n Представляет числовой тип, b Представляет логический тип, d Представляет тип даты и т. Д.
  • v: представляет исходное значение;
  • f: представляет формулу, например B2+B3 ;
  • h: HTML-контент
  • w: форматированный контент
  • r: богатый текстовый контент rich text
  • и многое другое

2.2.4. Читать книгу

в соответствии с !ref Определите сферу применения Excel, а затем в соответствии с !merges Убедитесь, что ячейки объединены (если есть), и, наконец, выведите всю таблицу, что вызывает затруднения. К счастью, сам плагин уже написал инструмент XLSX.utils Для непосредственного использования, без нашего собственного обхода, выходные данные инструмента в основном включают следующее:


Некоторые из них обычно не используются, наиболее часто используются:

  • XLSX.utils.sheet_to_csv : Создать формат CSV
  • XLSX.utils.sheet_to_txt : Создать текстовый формат
  • XLSX.utils.sheet_to_html : Создать формат HTML
  • XLSX.utils.sheet_to_json : Выходной формат JSON

Чаще всего используются sheet_to_csv или же sheet_to_html , Формат, объединение ячеек и другая информация будут игнорироваться при преобразовании в CSV, поэтому сложные таблицы могут быть неприменимы. Если вы конвертируете в html, ячейки будут объединены, но результат будет <html></html> Код вместо <table></table> , Это неудобно, когда вам нужно внести некоторые изменения в форму, поэтому вам все равно придется использовать соответствующие инструменты в зависимости от ситуации.

Вот простой пример вывода результатов путем преобразования в CSV, вы можете щелкнуть здесь, чтобы просмотретьДЕМО онлайн:

Существует два типа экспорта: один основан на существующей модификации Excel, другой - нового поколения, первый относительно прост, здесь мы сосредоточимся на втором.

3.1. Создайте собственный рукописный код

Экспорт файла Excel, в основном, как его создать sheet , Здесь мы пишем простой пример csv для Excel:

Получите объект blob выше, и вы можете загрузить его напрямую, см. Мой предыдущийJS всплывает диалоговое окно загрузкиИнкапсулирован внутри openDownloadDialog метод:

Таким образом, окончательная загрузка выглядит следующим образом:

3.2. Используйте официальные инструменты для создания

На самом деле, нам не нужно писать ни один из вышеперечисленных кодов. Чиновник предоставил нам готовые инструменты, в основном в том числе:

  • aoa_to_sheet : Этот класс инструментов является наиболее мощным и практичным.Преобразование двумерного массива в лист автоматически обработает числовые, строковые, логические, даты и другие типы данных;
  • table_to_sheet : Поставить один table dom Непосредственно преобразованный в лист, он будет автоматически распознан colspan с rowspan И преобразовать его в соответствующую ячейку и объединить;
  • json_to_sheet : Преобразовать массив объектов в лист;

table_to_sheet Еще проще, прямо XLSX.utils.table_to_sheet($('table')[0]) Может

3.3. Решение проблемы слияния ячеек

Вообще говоря, интерфейсное поколение excel Вместо csv Основная цель - решить проблему, заключающуюся в том, что csv не может выполнить слияние ячеек. В противном случае было бы неплохо напрямую экспортировать файл csv. Зачем вводить несколько сотен килобайт плагинов.

Предположим, мы хотим сгенерировать файл Excel в следующем формате, где A1-C1 Чтобы объединить ячейки:


код показан ниже:

Стоит обратить внимание на использование объединенных ячеек. null Зарезервируйте место, иначе следующий контент (в этом примере четвертый столбец Дополнительная информация ) Будет перезаписан.

3.4. Пользовательский стиль

Обычная версия не поддерживает определение шрифтов, цветов, цветов фона и т. Д., Вы можете использовать ее, если вам нужна эта функция.профессиональная версия, Вроде заряжено, потому что официальный сайт не видел адреса загрузки.

На странице описания библиотеки Apache POI представлены свойства и методы взаимодействия Java приложений с файлами Excel. Здесь рассматривается пример использования Apache POI для чтения файлов Excel 2007 или более поздней версии. Если необходимо обрабатывать Excel 1997-2003, то следует использовать классы, наименования которых начинаются с символа 'H' (см. наименование классов на странице описания Apache POI).

Открытие книги Excel

Чтобы «открыть» файл Excel как HSSFWorkbook (.xls), так и XSSFWorkbook (.xlsx) можно использовать либо File, либо InputStream. При использовании InputStream требуется больше памяти для загрузки файла в буффер.

Метод openBook демонстрирует использование WorkbookFactory для открытия Excel файла. Строки использования InputStream закомментированы.

Если нужно обойти использование WorkbookFactory, т.е. использовать XSSFWorkbook (HSSFWorkbook) напрямую, то следует использовать OPCPackage (.xlsx) или NPOIFSFileSystem (.xls).

Открытие страницы

При открытии страницы слеудет использовать метод getSheet с указанием в качестве параметра наименования страницы. Здесь необходимо быть внимательным, поскольку наименования страницы по умолчанию могут быть как «Sheet», так и «Лист», в зависимости от локализации операционной системы и Excel.

Перебор строк и ячеек

Чтобы «пройтись» по всем страницам книги и перебрать все значения в ячейках можно использовать итераторы. Следующий код показывает использование итераторов для перебора всех ячеек страницы.

Итераторы доступны по вызовам workbook.sheetIterator(), sheet.rowIterator() и row.cellIterator(). Но необходимо помнить, что rowIterator и cellIterator перебирают только строки и ячейки, которые созданы, пропуская пустые строки и ячейки.

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

В представленном коде для чтения ячейки был использован метод getCell(int). Можно использовать метод getCell(int, MissingCellPolicy), где MissingCellPolicy, определяет условие возвращения пустых и отсутствующих ячеек. Однако IDE Eclipse, где работоспособность кода проверялась, показывает, что MissingCellPolicy упразднена (deprecated), а метод getCell(int) для ячейки типа XSSFCell вернул правильные значения. Определение значений ячеек выполнялось в методе printCell(row, cell).

Чтение содержимого ячейки

Чтобы получить значение ячейки, необходимо знать тип её значения. Полагаю, что Вы не раз сталкивались с числовым представлением значения даты. Если у текстовой ячейки попытаться получить числовое значение, то будет вызвано NumberFormatException. Поэтому, необходимо первоначально определиться с типом, чтобы использовать соответствующий метод.

Следующий код в цикле проходит по ячейкам в строке и выводит в консоль ссылочную информацию на ячейку (например $A$3) и содержимое ячейки. Причем, сначала отображается значение, полученное методом formatCellValue класса DataFormatter, а после символа слеша '/' отображается значение, получаемое методами getRichStringCellValue(), getDateCellValue(), getNumericCellValue(), getBooleanCellValue() и getCellFormula() класса XSSFCell.

Пример чтения файла Excel

Работоспособность представленного на странице кода (методов), была проверена в примере, структура которого изображена на следующем скриншоте. Это проект Eclipse, включающий перечень необходимых библиотек для чтения файла Excel. Основной класс ExcelRead реализует все представленные выше методы.


На следующем скриншоте представлена страница простенького файла Excel, содержащая ячейки со значениями типа Date, String, Numeric и ячейки с формулами.


Результат чтения файла

Значения ячеек книги Excel в примере отображаются в консоли. Обратите внимание на отличия значений до слеша и после него для типов Date и Numeric. При необходимости можно использовать в приложении переменные соответствующего типа (Date, Integer) и должным образом отформатировать значения.

Исходный пример, рассмотренный в тексте страницы, можно скачать здесь (11.7 Мб).

Читайте также: