Как экспортировать таблицы в Excel с веб-страницы

Как я могу экспортировать таблицы в Excel с веб-страницы. Я хочу, чтобы экспорт содержал все форматирование и цвета.

Комментарии к вопросу (9)

Бесспорно, самый чистый, легкий экспорт из таблиц в Excel библиотека jQuery объекты DataTable плагин инструменты стол. Вы получите сетку, которая сортирует, фильтрует, заказов, страниц и данных, и с помощью нескольких дополнительных строк кода и два небольших файлов в комплекте, вы получаете экспорт в Excel, PDF-файл, CSV-файл, в буфер обмена и на принтер.

Это весь код, который's требовало:

  $(document).ready( function () {
    $('#example').dataTable( {
        "sDom": 'Tlfrtip',
        "oTableTools": {
            "sSwfPath": "/swf/copy_cvs_xls_pdf.swf"
        }
    } );
} );

Таким образом, быстрое развертывание, отсутствие ограничений браузера, на стороне сервера не требуется язык, и чаще всего очень легко понять. Это'ы в выигрыше. Единственное, у него есть ограничения, хотя, строго форматирование колонок.

Если форматирование и цвета-абсолютный "скатертью дорожка", единственный 100% Надежный, кросс-браузер способ я'вэ нашел, чтобы использовать серверный язык, чтобы обработать необходимые файлы Excel из вашего кода. Мое решение выбора PHPExcel это только один я'вэ нашел до сих пор, что положительно занимается экспортом с форматированием в современной версии Excel из любого браузера, когда вы даете ему ничего, кроме HTML-кода. Позвольте мне прояснить, хотя, это'ы наверняка не так легко, как первого раствора, а также немного пожирателем ресурсов. Однако, с другой стороны, он также может выводить непосредственно в PDF. И, как только вы получите его настроить, он просто работает каждый раз.

Обновление - 15 сентября 2016: TableTools было прекращено в пользу нового плагина под названием "кнопки, что" Эти инструменты выполняют те же функции, что старый TableTools расширения, но гораздо проще установить и они делают использование HTML5 загрузки для современных браузерах, с возможностью отката к первоначальному скачать Flash для браузеров, которые Дон'т поддерживать стандарт HTML5. Как видно из многих комментариев, так как я разместил этот ответ в 2011 году, главная слабость TableTools была решена. Я все еще могу'т рекомендовать объекты DataTable достаточно для обработки больших объемов данных просто, как для разработчика и пользователя.

Комментарии (10)

Давным-давно, я обнаружил, что Excel будет открыть HTML-файл с таблицей, если мы отправим его с типом контента Excel. Рассмотреть вышеуказанный документ:




  Java Friends


  <table style="font-weight: bold">
    <tr style="background-color:red"><td>a</td><td>b</td></tr>
    <tr><td>1</td><td>2</td></tr>
  </table>    

Я побежал следующий букмарклет на это:

javascript:window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);

и в самом деле я получил его для скачивания как файл Excel. ** Однако я не получил ожидаемый результат - файл был открыт в OpenOffice.org писатель. То есть моя проблема: я не владею Excel в эту машину, поэтому я не могу попробовать его лучше. Кроме того, этот трюк работал более или менее шести лет назад со старыми браузерами и старинной версии MS офиса, поэтому я не могу сказать, если он будет сегодня работать.

В любом случае, в указанном выше документе я добавил кнопку, что бы скачать весь документ в формате Excel, в теории:




  Java Friends


  <table style="font-weight: bold">
    <tr style="background-color:red"><td>a</td><td>b</td></tr>
    <tr><td>1</td><td>2</td></tr>
    <tr>
      <td colspan="2">

            Get as Excel spreadsheet

      </td>
    </tr>
  </table>    

Сохраните его в файл и нажать на кнопку. Я'д love, чтобы знать, если он работал или нет, поэтому я прошу вас комментировать даже сказать, что он не работает.

Комментарии (11)

Можно использовать старый Excel 2003 в формате XML (перед функция OpenXML), чтобы создать строку, которая содержит нужный XML, то на стороне клиента можно использовать данные URI, чтобы открыть файл с помощью элемента xsl тип MIME, или отправить файл с клиента помощью Excel файл типа "По материалам-тип: application/vnd в.в MS-Excel с" от серверной стороне.

  1. Откройте Excel и создайте таблицу с нужным форматированием и цветами.
  2. Сохранить книгу Excel как "таблица XML 2003 (*.я в XML)&;
  3. Откройте полученный файл в текстовом редакторе, например "блокнот" и скопировать значение в строку в приложении
  4. Предполагая, что вы используете подхода к клиенту с URI данных, код будет выглядеть следующим образом: в <предварительно> в <код> &ЛТ;тип сценария="и текст/javascript" и&АМП;ГТ; ВАР worksheet_template = '&ЛТ;?XML версии=на"1.0" и?&ГТ;&ЛТ;СС:книги описание:СС=с"урна:схим-Майкрософт-com:офис:таблицы" и&АМП;ГТ;'+ '&ЛТ;СС:стили&ГТ;&ЛТ;сс:сс стиль:ИД="и 1" и&АМП;ГТ;&ЛТ;сс:сс шрифта:жирный шрифт-то"1" и/&АМП;ГТ;&ЛТ;/СС:стиль&ГТ;&ЛТ;/СС:стили&ГТ;&ЛТ;сс:сс лист:наименование=то"Лист1" и&АМП;ГТ;'+ '<ss:Table>{{ROWS}}</ss:Table></ss:Worksheet></ss:Workbook>'; ВАР row_template = '&ЛТ;сс:сс подряд:StyleID="и 1" и&АМП;ГТ;&ЛТ;СС:сотовый&ГТ;&ЛТ;СС:сведения ss:Type="String">{{name}}</ss:Data></ss:Cell></ss:Row>'; &ЛТ;/скрипт&ГТ; </код> </пред>
  5. Затем вы можете использовать строку заменить, чтобы создать коллекцию строк, которые будут вставлены в ваш шаблон листа в <предварительно> в <код> &ЛТ;тип сценария="и текст/javascript" и&АМП;ГТ; ВАР строк = документ.метода getElementById("мой стол и").метод getelementsbytagname('тр'), row_data = ''; для (ВАР я = 0, длина = строк.длина; я &ЛТ; длина; я++) { row_data += row_template.заменить('{{имя}}' строки[я].метод getelementsbytagname('тд')[0].innerHTML будет); } &ЛТ;/скрипт&ГТ; </код> </пред>
  6. После собранной информации, создать итоговую строку и открыть новое окно с помощью URI данных в <предварительно> в <код> &ЛТ;тип сценария="и текст/javascript" и&АМП;ГТ; ВАР лист = worksheet_template.заменить('{{строки}}', row_data);

окна.открыть('данных:приложение/донгов.в MS-Excel, а'+лист); &ЛТ;/скрипт&ГТ; </код> </пред>

Стоит отметить, что старые браузеры не поддерживают схемы URI данных, поэтому вам может понадобиться, чтобы произвести файл сервер для тех браузеров, которые не поддерживают его.

Вам также может понадобиться, чтобы выполнить base64 кодирования данных URI содержимого, что может потребовать JS библиотеку, а также при добавлении строки ';в base64' после того, как тип MIME данных Ури.

Комментарии (3)

Excel имеет малоизвестную особенность под названием "запросов" и которые позволяют получить данные практически из любого веб-страницы без дополнительного программирования.

Веб-запросов в основном выполняет HTTP-запрос непосредственно в Excel и копирует некоторые или все полученные сведения (а при необходимости форматирования) на лист.

После того, как вы'вэ определенными веб-запрос, вы можете обновить его в любое время, даже не выходя из Excel. Так что вы Дон'т придется на самом деле "на экспорт" и данных и сохранить его в файл - вы'д, а обновить данные как из базы данных.

Вы даже можете использовать параметры URL, имея в Excel запросит у вас определенные критерии фильтрации и т. д...

Однако минусов я'вэ заметил до сих пор:

  • динамично загружаемых данных не работает, потому что JavaScript не выполняется
  • Длина url ограничена

Здесь вопрос о том, как создать веб-запросов в Excel. Это ссылки на Майкрософт поможет сайт о том, как-получить внешние данные из веб-страницы

Комментарии (2)

Это php, но вы можете изменить его на javascript:

<?php>
$colgroup = str_repeat("",5);
$data = "";
$time = date("M d, y g:ia");
$excel = "



<meta http-equiv=\"Content-type\" content=\"text/html;charset=utf-8\" />

.xl4566 {
color: red;
}



<div id=\"Classeur1_16681\" align=center x:publishsource=\"Excel\">
<table x:str border=0 cellpadding=0 cellspacing=0 style=\"border-collapse: collapse\">
$colgroup
<tr><td class=xl2216681>Col1</td><td class=xl2216681>Col2</td><td class=xl2216681 >Col3</td><td class=xl2216681 >Col4</td><td class=xl2216681 >Col5</td></tr>
<tr><td class=xl4566>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
</table>
</div>

";
  $fname = "Export".time().".xls";
  $file = fopen($fname,"w+");
  fwrite($file,$excel);
  fclose($file);
  header('Content-Type: application/vnd.ms-excel');
  header('Content-Disposition: attachment; filename="'.basename($fname).'"');
  readfile($fname);
  unlink($fname); ?> 
Комментарии (0)

Во-первых, я бы не рекомендую попробовать экспорт в HTML и надеются, что пользователь'ы экземпляре Excel поднимает его вверх. Мой опыт, что это решение чревато проблемами, в том числе несовместимости с клиентами Macintosh и бросая сообщение об ошибке для пользователя, что файл не указанного формата. Самые пуленепробиваемые, удобные решения на стороне сервера, где вы используете библиотеку для создания актуального файл Excel и отправить обратно пользователю. Следующий лучшим решением и более универсальным решением будет использование открытом формате XML. Я'вэ бежать в некоторых редких проблем с совместимостью со старыми версиями Excel, но в целом это должно дать вам решение, которое будет работать на любой версии Excel, включая компьютеры Mac.

Открыть XML

Комментарии (0)

Мозилла до сих пор поддерживают базы 64 Урис. Это позволяет динамически составить двоичного содержимого с помощью JavaScript:

<a href="data:application/vnd.ms-excelbase64 encoded binary excel content here"> download xls</a>

если файл Excel не очень навороченный (без схем, формул, макросов) можно порыться в формате и сочинять байт для файла, а затем закодировать их в base64 и положить в рот

см https://developer.mozilla.org/en/data_URIs

Комментарии (0)

Этот код только для IE, поэтому он полезен только в ситуациях, когда вы знаете, все ваши пользователи будут использовать IE (как, например, в некоторых корпоративных средах.)

<script Language="javascript">
function ExportHTMLTableToExcel()
{
   var thisTable = document.getElementById("tbl").innerHTML;
   window.clipboardData.setData("Text", thisTable);
   var objExcel = new ActiveXObject ("Excel.Application");
   objExcel.visible = true;

   var objWorkbook = objExcel.Workbooks.Add;
   var objWorksheet = objWorkbook.Worksheets(1);
   objWorksheet.Paste;
}
</script>
Комментарии (3)

На самом деле это более просто, чем вы думаете: "Просто" скопируйте HTML-таблицу (то есть HTML-код таблицы) в буфер обмена. Excel знает, как декодировать HTML-таблицы; он даже попытается сохранить атрибуты.

Самое сложное - это "скопировать таблицу в буфер обмена", поскольку не существует стандартного способа доступа к буферу обмена из JavaScript. См. эту статью в блоге: Доступ к системному буферу обмена с помощью JavaScript - Святой Грааль?.

Теперь все, что вам нужно, это таблица в формате HTML. Я предлагаю jQuery и метод html().

Комментарии (0)

Предположения:

  1. данный url

  2. преобразование должно быть сделано на стороне клиента

  3. системы Windows, Mac и Linux

Решение для Windows:

Python код, который открывает окно IE и имеет доступ к нему: переменная url-адрес содержит адрес URL ('http://&#39;)

ie = Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate(theurl)

Примечание: если страница недоступна напрямую, но и логин, вам придется справиться с этим с помощью ввода данных форма и эмуляции действий пользователя в Python

вот пример

from win32com.client import Dispatch
ie.Document.all('username').value=usr
ie.Document.all('password').value=psw

таким же образом для извлечения данных из веб-страницы. Позвольте'говорят, что элемент с id 'EL1 начинает' содержать данные. получить текст элемента к переменной

el1 = ie.Document.all('el1').value

затем, когда данные в переменную в Python, вы можете открыть окно Excel в схожей манере с использованием Python:

from win32com.client import Dispatch
xlApp = Dispatch("Excel.Application")
xlWb = xlApp.Workbooks.Open("Read.xls")
xlSht = xlWb.WorkSheets(1)
xlSht.Cells(row, col).Value = el1

Раствор для Mac:

только совет: использование AppleScript - это простой и подобные API, как win32com.клиента отправка

Решение для Linux:

Ява.авт.Робот может работать, для этого он имеет кнопку, нажатие (горячие клавиши можно использовать), но нет API для Linux, что мне известно о том, что может работать как простой как помощью AppleScript

Комментарии (0)

простой поиск Google оказался этот:

если данные на самом деле HTML-страницы и не был создан по ASP, PHP или какой другой скриптовый язык, и вы используете Internet Explorer 6 и у вас Excel установлен на вашем компьютере, просто щелкните правой кнопкой мыши на странице и полистать меню. Вы должны увидеть и"Экспорт в Excel." Если все эти условия выполняются, нажмите на пункт меню и после нескольких приглашений он будет импортирован в Excel.

если вы можете'т сделать это, он дает альтернативный "и перетащите" по методу:

http://www.mrkent.com/tools/converter/

Комментарии (0)

И теперь есть способ лучше.

Инструкции OpenXML SDK для JavaScript.

https://openxmlsdkjs.codeplex.com/

Комментарии (1)

Практически существует два способа сделать это автоматически, в то время как только одно решение может быть использовано во всех браузерах. Прежде всего, для создания листа excel следует использовать спецификацию open xml. Существуют бесплатные плагины от Microsoft, которые делают этот формат доступным и для старых версий офиса. Открытый xml является стандартом, начиная с Office 2007. Очевидны два способа: на стороне сервера или на стороне клиента.

Реализация на стороне клиента использует новый стандарт CSS, который позволяет хранить данные, а не только URL-адрес к ним. Это отличный подход, так как вам не нужен вызов сервера, только данные и немного javascript. Недостатком является то, что microsoft не поддерживает все его части в текущих версиях IE (я не знаю о IE9). Microsoft ограничивает данные изображением, но нам нужен документ. В firefox это работает вполне нормально. Для меня IE был убийственной точкой.

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

Комментарии (1)
   function normalexport() {

       try {
           var i;
           var j;
           var mycell;
           var tableID = "tblInnerHTML";
           var drop = document.getElementById('');
           var objXL = new ActiveXObject("Excel.Application");
           var objWB = objXL.Workbooks.Add();
           var objWS = objWB.ActiveSheet;
           var str = filterNum(drop.options[drop.selectedIndex].text);
           objWB.worksheets("Sheet1").activate; //activate dirst worksheet
           var XlSheet = objWB.activeSheet; //activate sheet
           XlSheet.Name = str; //rename

           for (i = 0; i < document.getElementById("ctl00_ContentPlaceHolder1_1").rows.length - 1; i++) {
               for (j = 0; j < document.getElementById("ctl00_ContentPlaceHolder1_1").rows(i).cells.length; j++) {
                   mycell = document.getElementById("ctl00_ContentPlaceHolder1_1").rows(i).cells(j);

                   objWS.Cells(i + 1, j + 1).Value = mycell.innerText;

                   //                                                objWS.Cells(i + 1, j + 1).style.backgroundColor = mycell.style.backgroundColor;
               }
           }

           objWS.Range("A1", "L1").Font.Bold = true;
           //                objWS.Range("A1", "L1").Font.ColorIndex = 2;
           //                 objWS.Range("A1", "Z1").Interior.ColorIndex = 47;

           objWS.Range("A1", "Z1").EntireColumn.AutoFit();

           //objWS.Range("C1", "C1").ColumnWidth = 50;

           objXL.Visible = true;

       } catch (err) {
           alert("Error. Scripting for ActiveX might be disabled")
           return
       }
       idTmr = window.setInterval("Cleanup();", 1);

   }

   function filterNum(str) {

       return str.replace(/[ / ]/g, '');
   }
Комментарии (0)