Export to excel from delphi

I’m looking to export data to excel from Delphi without having to own a copy of excel, is this possible?

N.B. CSV will not do.

Jon Seigel's user avatar

Jon Seigel

12.2k8 gold badges57 silver badges92 bronze badges

asked Mar 22, 2010 at 14:44

AJM's user avatar

Try zexmlss. This library can create and load excel 2003 XML format files. Support merged cells, borders, vertical and horizontal alignment and other. Zlib license. Work with delphi 6, 7, 9-14 and lazarus.

answered Nov 7, 2010 at 20:01

Hikikomori's user avatar

HikikomoriHikikomori

1211 silver badge2 bronze badges

3

I believe it’s possible to create MS Office documents as HTML. You don’t need to open them in a web browser then or anything, the file can still have the extension .xls and open in Excel like normal.

I just created a new spreadsheet and stuck the numbers 1-3 in the first three cells of column A, and saved it as HTML. There was a bunch of extra mess that probably isn’t all necessary. I stripped out as much as I could, here’s what looks to be the bare minimum to produce a working spreadsheet.

Try creating a new text file with this as its contents, and save it with a .xls extension.

<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>Sheet1</x:Name>
    <x:WorksheetOptions>
     <x:Selected/>
     <x:Panes>
      <x:Pane>
       <x:Number>3</x:Number>
       <x:ActiveRow>3</x:ActiveRow>
      </x:Pane>
     </x:Panes>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body>

<table x:str>
    <tr>
        <td x:num width=64>1</td>
    </tr>
    <tr>
        <td x:num>2</td>
    </tr>
    <tr>
        <td x:num>3</td>
    </tr>
</table>
</body>
</html>

answered Mar 22, 2010 at 14:53

Matt Blaine's user avatar

Matt BlaineMatt Blaine

1,96614 silver badges22 bronze badges

2

oExport — XLSX/ODS native Delphi import/export library

  • no external dll libraries are required
  • no dependency on Excel or Calc installation (no OLE)
  • full unicode support even for D7, D2007
  • supported cell types: string, number, percent, formula, time, date, datetime
  • cell formatting: cell width+height, horizontal+vertical alignment, wrap text, font, background color, borders
  • col/row span
  • tested and working under Delphi 2007 and XE2 32bit+64bit: should be compatible with all D7 to XE2
  • NEW OFiller: fill DOCX (Word 2007), ODT (OpenOffice Writer), XLSX (Excel 2007), ODS (OpenOffice Calc) templates

http://www.kluug.at/xlsx-ods-delphi.php

licensed under a MPL/GPL/LGPL tri-license
Version: MPL 1.1/GPL 2.0/LGPL 2.1

answered Mar 14, 2012 at 1:46

Erwan's user avatar

ErwanErwan

2023 silver badges10 bronze badges

3

SMExport from Scalabium (scalabium.com) includes lots of formats, including Excel format with or without having Excel installed.

answered May 9, 2010 at 6:38

Rob McDonell's user avatar

Rob McDonellRob McDonell

1,3099 silver badges15 bronze badges

NativeExcel mentioned earlier is from Nika-Soft. Not free, but it works fine. I am using it now for over one year without problems. http://www.nika-soft.com/nativeexcel2/

answered May 9, 2010 at 9:03

Christian's user avatar

ChristianChristian

7037 silver badges15 bronze badges

TXLSFile library v.4.0. and XLSExport components

We’ve used successfully with D2007, D2009 & D2010

What is TXLSFile

  TXLSFile is a Delphi library for reading and writing MS Excel 
  XLS files. It is based on direct reading and writing of files, 
  and works without OLE Automation with Microsoft Excel. 

  TXLSFile is  distributed  with  XLSExport  components  package. 
  XLSExport is a Delphi components package  for quick data 
  export  into  MS Excel file with  one line  of code.  

http://sm-software.com

answered May 9, 2010 at 15:16

rhazell's user avatar

rhazellrhazell

2851 gold badge3 silver badges5 bronze badges

theree is a very simple way to achive this and is by use of a text file. Simply output the data, each field followed by a comma, followed by a carriage return. Save this file with a .CSV extension. This should still work on Excel; I use Open Officw these days

answered Dec 22, 2013 at 17:05

rmuirhead's user avatar

1

Содержание

  1. Экспорт документов в Excel
  2. Подключение.
  3. Текст ячеек.
  4. Объект Range, выделение диапазона, объединение ячеек, выравнивание.
  5. Границы и перенос по словам.
  6. Пример.
  7. Параметры страницы.
  8. Шрифты и цвета.
  9. Колонтитулы.
  10. How to export a report to Excel XML from Delphi / Lazarus
  11. Let’s compare the resulting XLSX and Excel XML files
  12. Limited features and possible limitations of the XLSX Excel 2007 format
  13. Записать в Excel XML из Delphi / Lazarus
  14. Сравним получившиеся XLSX и Excel XML
  15. Ограниченные возможности и возможные ограничения формата XLSX Excel 2007

Экспорт документов в Excel

Эта статья первая из цикла статей посвященных экспорту документов в MS Excel. В ней мы рассмотрим подключение к Excel, заполнению ячеек и простейшее оформление документа.

Я не буду углубляться в теорию, рассказывать о том как работает OLE механизм, начнем с самого главного.

Подключение.

Для подключения к Excel и работы с ним нам понадобится переменная типа Variant:

Далее создаем OLE объект:

Добавляем новую книгу:

Так же нам понадобятся константы:

Текст ячеек.

Теперь до любой ячейки мы можем добраться следующим образом:

Объект Range, выделение диапазона, объединение ячеек, выравнивание.

Представьте такую ситуацию: необходимо объединить несколько ячеек и выровнять текст в них по центру.

Границы и перенос по словам.

Для начала выделяем нужный диапазон а затем.

И включаем перенос по словам:

Пример.

Пример можно скачать здесь

Параметры страницы.

Начнем с полей страницы. Во первых для того чтобы добраться до параметров страницы у листа Excel имеется свойство объект PageSetup его мы и будем использовать. Для установки размеров полей необходимо изменить соответствующие свойства PageSetup, вот эти свойства:

  • LeftMargin — Левое поле
  • RightMargin — Правое поле
  • TopMargin — Верхнее поле
  • BottomMargin — Нижнее поле

Значение размеров полей необходимо указывать в пикселях, к чему мы не очень привыкли, поэтому воспользуемся функцией InchesToPoints объекта Application, которая переводит значение в дюймах в значение в пикселях. Теперь напишем процедуру которая подключит Excel и установит поля равные 0.44 дюйма (приблизительно 1 см):

Иногда полезно уметь установить и ориентацию страницы:

Здесь значение ориентации = 2, означает альбомную, при книжной ориентации присвойте Orientation значение 1.

Вы наверное не раз встречали такой отчет в котором таблица с большим количеством строк размещается на нескольких страницах в таких случаях очень удобны сквозные строки, они печатаются на каждой странице отчета:

Здесь мы указываем вторую и третью строки для печати на каждой странице.

Шрифты и цвета.

Для установки шрифта и размера текста выделите нужный диапазон и установите свойство Name объекта-свойства Font объекта Selection или свойство Size для изменения размера:

Если Вы хотите установить жирный или, например, наклонный стиль написания текста установите соответствующие свойства:

Для указания цвета текста измените свойство ColorIndex все того же объекта Font:

Вот несколько индексов цветов:

Для изменения цвета фона ячейки используйте объект Interior свойства Selection:

Колонтитулы.

Для добавления колонтитула к документу достаточно указать его содержание:

Для изменения размера шрифта добавьте к колонтитулу управляющий символ «&» и размер шрифта:

Источник

How to export a report to Excel XML from Delphi / Lazarus

A developer has a huge choice of options when the task is to export to Excel from Delphi or Lazarus – it was partially described in the article “How to export a report to XLS Biff8 from Delphi” and there I also briefly explained why it is a bad choice. And what is a good choice, then? Well, it’s better to save a file in a new (well, relatively new) XML XLSX format.

» XML is a technology designed to manage structured data and display that data as a human-readable text file. XML conforms to industry standards and can be processed by many databases and applications. Using XML, many developers can create their own customized tags, data structures, and schemas. In general, XML greatly facilitates the definition, transfer, validation, and interpretation of data in various databases, applications, and organizations. «

But Microsoft wouldn’t be itself if it didn’t try to traditionally make “its own XML – with blackjack and cells!” And therefore, Excel actually works with not one but two (!) XML standards for storing Excel spreadsheets: an older and a more correct one.

As I mentioned many times before, FastReport allows you to save your documents, reports and data from Delphi and Lazarus in a great variety of formats. Creating the report itself is a piece of cake, you can see it in previous articles – the only thing I want to point out is that you need to watch the alignment of your objects so that the resulting spreadsheets are attractive and qualitative. So, we have two different (!) export filters for Excel XML. Look at it!

We can see a preview window and Save button.
“Hey, but what can a simple developer like me use here?” – you ask and you will be absolutely right. The short answer is 2007 XML, a later version, and below I will tell you why.

It is clear that the programmer never does anything ‘just because he wants to’ – the user is the one who wants something. So what’s the difference between these two formats from the user’s point of view when he wants to get an Excel spreadsheet from the application? For the user this difference is approximately the same as between rtf without any pictures and a full-fledged MS Word document – the first one hardly ever occurs in real life. In a simple XML file there are no styles or pictures – just a table in XML. But there was not much choice at the moment when it was invented – it was a huge step forward for MS Excel. Microsoft Excel 2007 XML can store pictures, it has styles etc. It is an OOML container.
You can delve into the topic of XML used from 2007 onwards here — it’s the entire world!

And we will just compare the two options for saving in XML and XLSX XML and decide which one it’s better to use and in what cases.

Exporting to XML is simpler: only text objects are exported. Images, graphs, maps, barcodes, TfrxRichView formatting, HTML tags and background image will not get into the resulting Excel XML file.
As usual, below I will describe how to implement saving in Excel XML format using a code, if you don’t want to or don’t need to show a preview window and give the opportunity to send it for printing. The export to XML settings window will appear. I put these two windows next to each other to give you the opportunity to compare the settings. It’s not just easy – it’s a piece of cake!

FastReport tools help you to choose which pages of our document to send to Excel, certain pages or a range.
Export settings: better visual correspondence with the original version (WYSIWYG), page breaks and continuous document which skips headers and footers.

How the result will look like: don’t split, use report pages, use print on parent – every TrfxReportPage in the report template corresponds to a sheet of the book (provided that TfrxReportPage.PrintOnParent = False) or split by a special number of rows.
Open after export: the resulting file will be opened by Microsoft Excel immediately after export (or by any other software associated with XLSX files).

The resulting XML / XLSX can be saved as a file with the .xml extension in the local storage, sent to FTP, sent via E-mail or uploaded to one of the cloud storages (Dropbox, OneDrive, Box.com, GoogleDrive).

Let’s compare the resulting XLSX and Excel XML files

The first screenshot is the result of saving in XLSX format and as we can see this format doesn’t support data more complex than the plain text. But the second screenshot shows us all the possibilities of the XML format, such as full support of images and barcodes. Speaking about the weight of files, the result is quite predictable: XLSX — 48,0kB, XML — 40,0kB.

Let’s take a closer look at why XLSX weighs more than XML. These beautiful fish were taken as the basis. This document contains a lot of text, tabular data and 30 photographs. For greater clarity, let’s also compare it with the non-aging Excel 97, which we talked about in another article.

Excel 97 – it is a binary format (biff8) and it doesn’t have any compression so the file is so large. Unlike the later XML format, Excel 97 supports all kinds of images.

Excel table (XML) – an early version of XLSX, where the data is stored as simple, single, monolithic XML files, which makes them quite large compared to OOXML and MS Office legacy binary formats.

‘But the size of the file is minimal in the screenshot’, — you could say. The answer is simple: this size is indicated for a document where only the text will be displayed. Now imagine if this format supported the images – the document would take up a lot of space because there is still no compression. In addition, inline elements, such as images, are stored as binary encoded blocks which are not available for display.

Excel 2007 XLSX (XML) – Microsoft took the best from past formats and implemented the file compression. The size of the document is approximately 50-75% smaller than in previous versions.

Limited features and possible limitations of the XLSX Excel 2007 format

The number of columns increased from 256 to 16 384, the number of rows in a sheet increased from 65 536 to 1,048 576. Calculations in large sheets with many formulas were accelerated thanks to the Excel 2007 support of several processors and multithread chipsets.

Источник

Записать в Excel XML из Delphi / Lazarus

Когда задача стоит “Сохранить из Delphi или Lazarus в Excel” у разработчика просто огромный выбор — частично он описан в статье “Как записать в XLS Biff8 из Delphi”, там же я вкратце расписал, почему это плохой выбор. А что же тогда хорошо? А хорошо — сохранять в новый (ну, относительно новый) XML XLSX.

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

Но Microsoft не был бы собой, если бы, традиционно не попытался сделать “свой собственный XML — c блэкджеком и ячейками!”. А потому у Excel на самом деле есть не один а целых два(!) XML-стандарта для хранения Excel-файлов: более ранний и более правильный.

Как я уже неоднократно указывал, FastReport позволяет сохранять из Delphi и Lazarus ваши документы, отчёты информацию в великое множество форматов. Сделать сам отчёт — легче лёгкого, можно посмотреть в прошлых статьях — единственное, опять остановлюсь-отмечу — следите за выравниванием ваших объектов, чтобы результирующие табличные форматы получались красивыми качественными! Так вот — для Excel XML у нас два разных(!) фильтра экспорта. Вот, полюбуйтесь!

Видим окно предварительного просмотра и кнопку “сохранить
“Эй, уважаемый, а мне, простому программисту чем пользоваться?!” — спросите вы и будете совершенно правы. Короткий ответ — 2007 XML, более поздний. А ниже я расскажу, почему.

Понятно, что программист никогда не делает “потому, что захотелось” — хочется чего-либо пользователю. В чём же разница в этих двух форматах с точки зрения пользователя, жаждущего получить таблицу Excel из приложения? Со стороны пользователя разница примерно как между rft без картинок и полноценным файлом MS Word, и первый в реальной жизни почти не встречается. В простом XML нет, ни стилей ни картинок. Просто таблица в XML. Но в момент, когда его придумывали, и выбора-то особо не было — это был огромный шаг вперёд для MS Excel. А вот Microsoft Excel 2007 XML может хранить картинки , там есть стили и тд. Это контейнер OOML.

Углубиться в тему XML используемого с 2007 и далее можно тут — там целый мир!
А мы просто сравним два варианта сохранения в XML и XLSX XML и решим, какой использовать рациональнее и в каких случаях.

Экспорт в XML — более простой. Экспортируются только текстовые объекты. Изображения, графики, карты, штрихкоды, форматирование TfrxRichView, HTML-тэги и фоновое изображение в результирующий Excel XML не попадут.

Ниже традиционно распишу, как реализовать сохранение в Excel XML полностью из кода, если не хочется или не требуется показывать предпросмотр и давать возможность отправить на печать. Окошко настроек экспорта в XML . Специально размещаю рядом для сравнения настройки. Всё не просто, а очень просто!

Средства FastReport помогают выбрать, какие страницы нашего документа отправить в Excel, диапазон или только определённые страницы.

Настройки экспорта – большее визуальное соответствие с начальным вариантом (WYSIWYG), разрыв страницы, и continuous — непрерывный документ с пропуском промежуточных заголовков и подвалов страниц.

Как будет выглядеть результат: без разделения, разделение на листы с использованием страниц отчёта, Use print on parent — каждой странице TfrxReportPage в шаблоне отчёта соответствует лист книги (при условии, что TfrxReportPage.PrintOnParent = False) или же поделить на части с задаваемым количеством строк.

Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой Microsoft Excel (Ну или что у пользователя в системе ассоциировано с файлами расширения XLSX для их открытия).

Получившийся XML XLSX можно сохранить в виде файла с расширением .xml в памяти компьютера, отправить на FTP, отправить по Email или загрузить в одно из облачных хранилищ (Dropbox, OneDrive, Box.com, GoogleDrive).

Сравним получившиеся XLSX и Excel XML

Первый скриншот — это результат сохранения в формате XLSX и как мы видим, данный формат не поддерживает данные сложнее обычного текста. А вот второй скриншот показывает нам все возможности формата XML, т.е. полную поддержку штрихкодов, картинок. Если говорить про вес файлов, то результат ожидаемый: XLSX 48,0 КБ, XML 40,0 КБ.

Разберёмся подробнее почему XLSX весит больше XML. За основу взяли вот этих прекрасных рыбок. Данный документ содержит много текста, табличные данные и 30 фотографий. Для большей наглядности сравним ещё и нестареющий Excel 97, о котором мы говорили в другой статье.

Excel 97 — Формат двоичных файлов, бинарник (biff8), про сжатие тут не слышали и потому вес файла столь велик. В отличии от более позднего XML, формат 97 года поддерживает все виды изображений.

Excel table (XML) — Ранняя версия XLSX, где данные хранятся как простые одиночные монолитные XML-файлы, что делает их довольно большими, по сравнению с OOXML и устаревшими двоичными форматами Microsoft Office. Но на скриншоте вес минимален — возмутился бы каждый! Ответ прост, данный вес указан за документ, где отображаться будет только текст. А теперь представьте, если бы тут всё-таки была поддержка картинок, да он бы занимал кучу места, ведь о сжатии на этом моменте всё ещё никто не знает. Кроме того, встроенные элементы, такие как изображения, хранятся в виде двоичных закодированных блоков, но недоступны для отображения.

Excel 2007 XLSX (XML) — Microsoft взяли лучшее от прошлых форматов и внедрили сжатие файлов. Размер документа приблизительно на 50-75 процентов меньше, чем в предыдущих версиях.

Ограниченные возможности и возможные ограничения формата XLSX Excel 2007

Количество столбцов увеличилось с 256 до 16 384, количество строк в листе возросло с 65 536 до 1 048 576. Ускорены вычисления в больших листах, содержащих множество формул, благодаря поддержке Office Excel 2007 нескольких процессоров и многопоточных наборов микросхем.

Источник

Эта статья первая из цикла статей посвященных экспорту документов в MS Excel. В ней мы рассмотрим подключение к Excel, заполнению ячеек и простейшее оформление документа.

Я не буду углубляться в теорию, рассказывать о том как работает OLE механизм, начнем с самого главного.

Подключение.

Для подключения к Excel и работы с ним нам понадобится переменная типа Variant:

Excel:Variant;

Далее создаем OLE объект:

Excel:=CreateOleObject('Excel.Application');

Добавляем новую книгу:

Excel.Workbooks.Add;

Показываем Excel:

Excel.Visible:=true;

Так же нам понадобятся константы:

const
xlContinuous=1;
xlThin=2;
xlTop = -4160;
xlCenter = -4108;

Текст ячеек.

Теперь до любой ячейки мы можем добраться следующим образом:

Excel.ActiveWorkBook.WorkSheets[1].Cells[1, 2]:='Текст ячейки (1,2)';

Объект Range, выделение диапазона, объединение ячеек, выравнивание.

Представьте такую ситуацию: необходимо объединить несколько ячеек и выровнять текст в них по центру.

Выделяем:

Excel.ActiveWorkBook.WorkSheets[1].Range['A1:G1'].Select;

Объединяем:

Excel.ActiveWorkBook.WorkSheets[1].Range['A1:G1'].Merge;

И выравниваем:

Excel.Selection.HorizontalAlignment:=xlCenter;

Границы и перенос по словам.

Для начала выделяем нужный диапазон а затем…

Показываем границы:

Excel.Selection.Borders.LineStyle:=xlContinuous;
Excel.Selection.Borders.Weight:=xlThin;

И включаем перенос по словам:

Excel.Selection.WrapText:=true;

Пример.

Пример можно скачать здесь

Параметры страницы.

Начнем с полей страницы. Во первых для того чтобы добраться до параметров страницы у листа Excel имеется свойство объект PageSetup его мы и будем использовать. Для установки размеров полей необходимо изменить соответствующие свойства PageSetup, вот эти свойства:

  • LeftMargin — Левое поле
  • RightMargin — Правое поле
  • TopMargin — Верхнее поле
  • BottomMargin — Нижнее поле

Значение размеров полей необходимо указывать в пикселях, к чему мы не очень привыкли, поэтому воспользуемся функцией InchesToPoints объекта Application, которая переводит значение в дюймах в значение в пикселях. Теперь напишем процедуру которая подключит Excel и установит поля равные 0.44 дюйма (приблизительно 1 см):

procedure Connect;
var
  Excel:Variant;
begin
  Excel:=CreateOleObject('Excel.Application');
  Excel.Workbooks.Add;

  Excel.ActiveSheet.PageSetup.LeftMargin:= Excel.Application.InchesToPoints(0.44);
  Excel.ActiveSheet.PageSetup.RightMargin:= Excel.Application.InchesToPoints(0.44);
  Excel.ActiveSheet.PageSetup.TopMargin:= Excel.Application.InchesToPoints(0.44);
  Excel.ActiveSheet.PageSetup.BottomMargin:= Excel.Application.InchesToPoints(0.44);
end;

Иногда полезно уметь установить и ориентацию страницы:

  Excel.ActiveSheet.PageSetup.Orientation:= 2;

Здесь значение ориентации = 2, означает альбомную, при книжной ориентации присвойте Orientation значение 1.

Вы наверное не раз встречали такой отчет в котором таблица с большим количеством строк размещается на нескольких страницах в таких случаях очень удобны сквозные строки, они печатаются на каждой странице отчета:

  Excel.ActiveSheet.PageSetup.PrintTitleRows:='$2:$3';

Здесь мы указываем вторую и третью строки для печати на каждой странице.

Шрифты и цвета.

Для установки шрифта и размера текста выделите нужный диапазон и установите свойство Name объекта-свойства Font объекта Selection или свойство Size для изменения размера:

  Excel.ActiveWorkBook.WorkSheets[1].Range['F1'].Select;
  Excel.Selection.Font.Name:='Courier New';
  Excel.Selection.Font.Size:=18;

Если Вы хотите установить жирный или, например, наклонный стиль написания текста установите соответствующие свойства:

  Excel.ActiveWorkBook.WorkSheets[1].Range['G1'].Select;
  Excel.Selection.Font.Bold:=true; // Для жирного текста
  Excel.Selection.Font.Italic:=true; // Для наклонного текста

Для указания цвета текста измените свойство ColorIndex все того же объекта Font:

  Excel.ActiveWorkBook.WorkSheets[1].Range['A1'].Select;
  Excel.Selection.Font.ColorIndex:=3;

Вот несколько индексов цветов:

  • Индекс — Цвет
  • 0 — Авто
  • 2 — Белый
  • 3 — Красный
  • 5 — Синий
  • 6 — Желтый
  • 10 — Зеленый

Для изменения цвета фона ячейки используйте объект Interior свойства Selection:

  Excel.ActiveWorkBook.WorkSheets[1].Range['H1'].Select;
  Excel.Selection.Interior.ColorIndex:=3; // Цвет

Колонтитулы.

Для добавления колонтитула к документу достаточно указать его содержание:

  Excel.ActiveSheet.PageSetup.LeftFooter:='Левый нижний колонтитул';
  Excel.ActiveSheet.PageSetup.CenterFooter:='Центральный нижний колонтитул';
  Excel.ActiveSheet.PageSetup.RightFooter:='Правый нижний колонтитул';
  Excel.ActiveSheet.PageSetup.LeftHeader:='Левый верхний колонтитул';
  Excel.ActiveSheet.PageSetup.CenterHeader:='Центральный верхний колонтитул';
  Excel.ActiveSheet.PageSetup.RightHeader:='Правый верхний колонтитул';

Для изменения размера шрифта добавьте к колонтитулу управляющий символ «&» и размер шрифта:

  Excel.ActiveSheet.PageSetup.LeftFooter:='&7Левый нижний колонтитул';

На этом пока все. Пример к статье здесь

unit uExportSales;

interface

type

  TExport = class

    procedure ExportRestSalesXLS;

    procedure ExporAlltSalesXLS;

  end;

implementation

uses

  FireDAC.Comp.Client, //

  uDBConnection, System.Win.ComObj, System.AnsiStrings, System.IOUtils, Vcl.Forms,

  Vcl.Graphics, System.SysUtils, System.Variants;

procedure TExport.ExportRestSalesXLS;

  function getCountAlreadyExported(): integer;

  var

    q: TFdquery;

  begin

    q := TFdquery.Create(nil);

    try

      with q do

      begin

        connection := DBConnection_Sales.FDConnection;

        sql.Text := ‘SELECT value FROM salesforecast_db.servicetable where name=’‘salesXLSFileCount’‘;’;

        Disconnect();

        Open();

        result := FieldByName(‘value’).AsInteger;

        Close();

      end;

    finally

      q.free();

    end;

  end;

  function getCountSales(): Integer;

  var

    q: TFdquery;

  begin

    q := TFdquery.Create(nil);

    try

      with q do

      begin

        connection := DBConnection_Sales.FDConnection;

        sql.Text := DBConnection_Sales.qCountSales.SQL.Text;

        Disconnect();

        Open();

        result := FieldByName(‘countSales’).AsInteger;

        Close();

      end;

    finally

      q.free();

    end;

  end;

var

  e: Variant;

  q: TFDQuery;

  countRecAlreadyExported: integer;

  i: integer;

  filePath: string;

  countSales: int64;

begin

  countRecAlreadyExported := getCountAlreadyExported();

  countSales := getCountSales();

  e := CreateOleObject(‘Excel.Application’);

  filePath := ExtractFilePath(Application.ExeName) + ‘sales.xlsx’;

  if TFile.Exists(‘sales.xlsx’) then

    e.workbooks.open(filePath)

  else

  begin // create new

    e.Workbooks.Add;

    e.columns[1].columnwidth := 24.71;

    e.columns[2].columnwidth := 24.71;

    e.columns[3].columnwidth := 24.71;

    e.columns[4].columnwidth := 24.71;

    e.columns[5].columnwidth := 24.71;

    e.columns[6].columnwidth := 24.71;

    e.columns[7].columnwidth := 24.71;

    e.columns[8].columnwidth := 24.71;

// e.ActiveWorkBook.WorkSheets[1].Cells[1, 2] := ‘Текст ячейки (1,2)’;

  //

    e.ActiveSheet.PageSetup.LeftMargin := e.Application.InchesToPoints(0.44);

    e.ActiveSheet.PageSetup.RightMargin := e.Application.InchesToPoints(0.44);

    e.ActiveSheet.PageSetup.TopMargin := e.Application.InchesToPoints(0.44);

    e.ActiveSheet.PageSetup.BottomMargin := e.Application.InchesToPoints(0.44);

  //

    e.Rows[1].font.bold := true;

    e.Rows[1].font.size := 10;

    e.Rows[1].font.color := clBlack;

  // headers…

    e.ActiveWorkBook.WorkSheets[1].cells[1, 1] := ‘Дата’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 2] := ‘Номер’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 3] := ‘Отдел’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 4] := ‘Название’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 5] := ‘Цена’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 6] := ‘Количество’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 7] := ‘Сумма’;

    e.ActiveWorkBook.WorkSheets[1].cells[1, 8] := ‘Устройство’;

  //

    countRecAlreadyExported := 0;

  end;

//  e.Visible := true;

  q := TFdquery.Create(nil);

  try

    with q do

    begin

      connection := DBConnection_Sales.FDConnection;

      sql.Text := DBConnection_Sales.qSales.SQL.Text + ‘limit ‘ + countRecAlreadyExported.ToString + ‘,10000’;

      Disconnect();

      Open();

      i := countRecAlreadyExported + 1;

      while not eof do

      begin

        e.ActiveWorkBook.WorkSheets[1].cells[i, 1] := DateTimeToStr(FieldByName(‘localDate’).AsDateTime);

        e.ActiveWorkBook.WorkSheets[1].cells[i, 2] := FieldByName(‘doubleNumber’).AsString;   //doubleNumber

        e.ActiveWorkBook.WorkSheets[1].cells[i, 3] := FieldByName(‘depName’).AsString; // ‘Отдел’; //depName

        e.ActiveWorkBook.WorkSheets[1].cells[i, 4] := FieldByName(‘goodName’).AsString; //’Название’;

        e.ActiveWorkBook.WorkSheets[1].cells[i, 5] := FormatFloat(‘0.00’, FieldByName(‘price’).AsFloat); //’Цена’;

        e.ActiveWorkBook.WorkSheets[1].cells[i, 6] := FieldByName(‘quantity’).AsInteger.ToString(); //’Количество’;  //quantity

        e.ActiveWorkBook.WorkSheets[1].cells[i, 7] := FormatFloat(‘0.00’, FieldByName(‘summ’).AsFloat);

        e.ActiveWorkBook.WorkSheets[1].cells[i, 8] := FieldByName(‘deviceName’).AsString; //’Устройство’;  //

        inc(i);

        Next();

      end;

      Close();

      //test

      {

      i := i + 1;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 1] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 2] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 3] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 4] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 5] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 6] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 7] := ‘test’;

      e.ActiveWorkBook.WorkSheets[1].cells[i, 8] := ‘test’;

      }

      // update countExported

      // UPDATE `salesforecast_db`.`servicetable` SET `value`=’10206′ WHERE `id`=’2′;

      q := TFdquery.Create(nil);

      try

        with q do

        begin

          connection := DBConnection_Sales.FDConnection;

          sql.Text := ‘UPDATE `salesforecast_db`.`servicetable` SET `value`=:value WHERE `name`=’‘salesXLSFileCount’»;

          params.ParamValues[‘value’] := countSales;

          ExecSQL;

        end;

      finally

        q.free();

      end;

      //

      e.DisplayAlerts := False;

      e.ActiveWorkbook.SaveAs(ExtractFilePath(Application.ExeName) + ‘salesTemp.xlsx’);

      e.Application.Quit;

      e := Unassigned;

      TFile.Delete(filePath);

      TFile.Copy(ExtractFilePath(Application.ExeName) + ‘salesTemp.xlsx’, ExtractFilePath(Application.ExeName) + ‘sales.xlsx’);

      TFile.Delete(ExtractFilePath(Application.ExeName) + ‘salesTemp.xlsx’);

    end;

  finally

    q.free();

    //e.DisplayAlerts := False;

    //e.ActiveWorkbook.Save();

    //e.DisplayAlerts := True;

  end;

  // export more records

end;

procedure TExport.ExporAlltSalesXLS;

var

  e: Variant;

  sheet: Variant;

  q: TFDQuery;

  i: integer;

  countSales: int64;

const

  xlContinuous = 1;

  xlThin = 2;

  xlTop = 4160;

  xlCenter = 4108;

begin

  e := CreateOleObject(‘Excel.Application’);

  e.Workbooks.Add;

  e.columns[1].columnwidth := 24.71;

  e.columns[2].columnwidth := 24.71;

  e.columns[3].columnwidth := 24.71;

  e.columns[4].columnwidth := 24.71;

  e.columns[5].columnwidth := 24.71;

  e.columns[6].columnwidth := 24.71;

  e.columns[7].columnwidth := 24.71;

  e.columns[8].columnwidth := 24.71;

// e.ActiveWorkBook.WorkSheets[1].Cells[1, 2] := ‘Текст ячейки (1,2)’;

  //

  e.ActiveSheet.PageSetup.LeftMargin := e.Application.InchesToPoints(0.44);

  e.ActiveSheet.PageSetup.RightMargin := e.Application.InchesToPoints(0.44);

  e.ActiveSheet.PageSetup.TopMargin := e.Application.InchesToPoints(0.44);

  e.ActiveSheet.PageSetup.BottomMargin := e.Application.InchesToPoints(0.44);

  //

  e.Rows[1].font.bold := true;

  e.Rows[1].font.size := 10;

  e.Rows[1].font.color := clBlack;

  // headers…

  sheet := e.workbooks[1].worksheets[1];

  e.ActiveWorkBook.WorkSheets[1].cells[1, 1] := ‘Дата’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 2] := ‘Номер’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 3] := ‘Отдел’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 4] := ‘Название’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 5] := ‘Цена’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 6] := ‘Количество’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 7] := ‘Сумма’;

  e.ActiveWorkBook.WorkSheets[1].cells[1, 8] := ‘Устройство’;

  //

  q := TFdquery.Create(nil);

  try

    with q do

    begin

      connection := DBConnection_Sales.FDConnection;

      sql.Text := DBConnection_Sales.qCountSales.SQL.Text;

      Disconnect();

      Open();

      countSales := FieldByName(‘countSales’).AsInteger;

      Close();

    end;

  finally

    q.free();

  end;

  //

  q := TFdquery.Create(nil);

  try

    with q do

    begin

      connection := DBConnection_Sales.FDConnection;

      sql.Text := DBConnection_Sales.qSales.SQL.Text;

      params.ParamValues[‘limit’] := countSales;

      Disconnect();

      Open();

      i := 2;

      while not eof do

      begin

        e.ActiveWorkBook.WorkSheets[1].cells[i, 1] := DateTimeToStr(FieldByName(‘localDate’).AsDateTime);

        e.ActiveWorkBook.WorkSheets[1].cells[i, 2] := FieldByName(‘doubleNumber’).AsString;   //doubleNumber

        e.ActiveWorkBook.WorkSheets[1].cells[i, 3] := FieldByName(‘depName’).AsString; // ‘Отдел’; //depName

        e.ActiveWorkBook.WorkSheets[1].cells[i, 4] := FieldByName(‘goodName’).AsString; //’Название’;

        e.ActiveWorkBook.WorkSheets[1].cells[i, 5] := FormatFloat(‘0.00’, FieldByName(‘price’).AsFloat); //’Цена’;

        e.ActiveWorkBook.WorkSheets[1].cells[i, 6] := FieldByName(‘quantity’).AsInteger.ToString(); //’Количество’;  //quantity

        e.ActiveWorkBook.WorkSheets[1].cells[i, 7] := FormatFloat(‘0.00’, FieldByName(‘summ’).AsFloat);

        e.ActiveWorkBook.WorkSheets[1].cells[i, 8] := FieldByName(‘deviceName’).AsString; //’Устройство’;  //

        inc(i);

        Next();

      end;

      Close();

    end;

  finally

    q.free();

  end;

  e.Visible := true;

end;

end.

Like this post? Please share to your friends:
  • Export to excel from asp
  • Export to excel format
  • Export to excel devextreme
  • Export to excel dbeaver
  • Export to excel abap