Существует много способов разнообразить внешний вид таблицы в MS Excel. Например, иногда таблица может стать более наглядной, если в одной ячейке разместить сразу два значения, разделив ее по диагонали на две части. Одним из вариантов использования такой ячейки является шапка таблицы, в ячейке которой сразу два заголовка – для строк и для столбцов.
Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами
Показаны сообщения с ярлыком MS Excel. Показать все сообщения
Показаны сообщения с ярлыком MS Excel. Показать все сообщения
19 августа 2021
11 августа 2021
Использование нескольких шрифтов и цветов в одной ячейке MS Excel одновременно
Каждое слово или буква в ячейке MS Excel может иметь свой шрифт, стиль шрифта, цвет и размер. Это позволяет сделать таблицу более наглядной и удобочитаемой. Для подобного форматирования ячейки достаточно перевести ее в режим редактирования нажатием клавиши F2 или двойным кликом левой кнопки мыши, выделить нужный участок текста и поменять параметры его шрифта. Как это сделать программным способом?
03 августа 2021
Как снять защиту книги MS Excel не зная пароль?
MS Excel позволяет защитить структуру книги паролем, что запретит другим пользователям манипуляции с ее листами. Не зная пароль нельзя добавлять, перемещать, удалять, скрывать и переименовывать листы, а также просматривать скрытые ранее листы. Звучит красиво. Но защита книги очень ненадежна и ее легко можно снять тем же способом, как я снимал защиту с листа MS Excel.
25 августа 2020
29 марта 2020
Создание выпадающего списка в ячейке электронной таблицы
Современные программы для создания электронных таблиц имеют много интересных функций, которые делают работу пользователя с данными более комфортной. Одна из таких функций "Проверка данных" ("Data Validation") позволяет контролировать корректность ввода данных в ячейке электронной таблицы. Контроль достигается за счет ограничения типа данных или значений, которые можно ввести в ячейку. Одним из часто используемых применений механизма проверки данных является создание выпадающих списков. Давайте посмотрим, как создать выпадающий список в ячейке электронной таблицы "руками" в Google Таблицы и Microsoft Excel. А также создадим его из программы.
09 октября 2019
Работа с файлами формата MS Excel в программе под Linux
Продолжая тему обработки файлов формата MS Excel в программах на Delphi, поговорим об их обработке в программе под Linux. Такую возможность программистам на Delphi предоставляет библиотека TMS FlexCel. Она позволяет работать с файлами формата MS Excel под всеми операционными системами, под которые Delphi умеет создавать исполняемый файл: Windows, Linux, Android и iOS.
16 сентября 2019
Запись в MS Excel. Кто быстрее?
В марте этого года я протестировал скорость чтение информации из файла MS Excel библиотеками работающие с файлом MS Excel "напрямую" (Чтение из MS Excel. Кто быстрее?). Сегодня давайте взглянем, как эти библиотеки справляются с записью файла.
Мой тест создает новый XLSX-файл с одним листом, на который записывает 10000 строк по 100 столбцов.
Каждая библиотека формирует файл 10 раз и результатом теста является среднее время. В качестве компилятора использована RadStudio v10.3.2. А результаты подтверждены на другом компьютере с компиляцией в RadStudio v10.3.1.const ciRowCount = 10000; ciColCount = 100;
09 сентября 2019
Новый генератор XLSX-файлов в EhLib 9.4
В EhLib всегда была возможность экспорта содержимого DBGridEh в MS Excel. Но EhLib версии 9.4 была дополнена новым классом TXlsMemFileEh, который не привязан к DBGridEh и является настоящим генератором файлов в формате MS Excel. Т.е. при желании используя TXlsMemFileEh можно создавать XLSX-файлы на основании любых данных.
18 марта 2019
Чтение из MS Excel. Кто быстрее?
При написании "Заполнение страницы MS Excel одной командой" я вспомнил про библиотеки работающие с файлом MS Excel "напрямую". Посмотрим, насколько чтение информации из MS Excel "напрямую" быстрее, чем при использовании OLE.
Создадим файл с 1 000 000 строк по 5 столбцов и прочитаем его различными способами.
11 марта 2019
Заполнение листа MS Excel одной командой
"А чё, так можно было, что ли?!?" | |
© Уральские пельмени |
Недавно, правя баги в чужом проекте, я в методе генерации отчета в шаблон MS Excel обнаружил то, о чем сам никогда не задумывался... Среди сотни строк присвоения значений ячейкам, я заметил, что одна таблица из сотни ячеек копируется на лист MS Excel одной строкой...
Алгоритм очень прост: создаем динамический двумерный вариантный массив, заполняем его значениями и присваиваем диапазону ячеек:
21 февраля 2019
Автоподбор высоты строки MS Excel после объединения ячеек
Шел 2019-й год... а MS Excel по-прежнему не научился рассчитывать высоту строки если в ней есть объединённые ячейки... И метод Range.AutoFit, который "Changes the height of the rows in the range to achieve the best fit", нас не спасёт.
15 сентября 2011
Конвертирование XLS/XLSX/XLSM в XLSB
С появлением MS Excel 2007 на смену привычного XLS-файла пришли сразу три формата:
Ни одна из библиотек для работы с файлами Excel в Delphi не поддерживает XLSB-формат. Например, XLSReadWrite поддерживает только XLSX, а авторы TMS FlexCel вообще не могут сказать, когда у них будет поддержка формата Excel 2007 и будет ли вообще. Поэтому, что бы конвертировать файлы Excel в XLSB-формат необходимо использовать OLE:
Var
xls: OleVariant;
...
Const
// formats in Excel 2007-2010
xlExcel12 = 50; // XLSB
xlOpenXMLWorkbook = 51; // XLSX
xlOpenXMLWorkbookMacroEnabled = 52; // XLSM
xlExcel8 = 56; // XLS (export to Excel 97-2003)
...
Procedure XYZ.ConvertFilesToXLSB(slFiles: TStringList);
Var
iFile: Integer;
begin
Try
Try
xls := CreateOleObject('Excel.Application');
xls.DisplayAlerts := False;
If StrToFloat(StringReplace(xls.Version, '.', DecimalSeparator, [])) < 12
then WriteToLog('Error! Requires Excel 2007/2010')
else for iFile := 0 to slFiles.Count-1 do
ConvertToXLSB(slFiles[iFile]);
Finally
xls.Quit;
xls := UnAssigned;
End;
Except
on E: Exception do
WriteToLog(E.Message);
End;
end;
Где ConvertToXLSB:
Procedure XYZ.ConvertToXLSB(sFileName: String);
Var
sFileNameTo: String;
begin
sFileName := ExpandFileName(sFileName);
sFileNameTo := ChangeFileExt(sFileName, '.xlsb');
Try
Try
xls.Workbooks.Open(sFileName);
xls.ActiveWorkbook.SaveAs(Filename := sFileNameTo, FileFormat := xlExcel12);
Finally
xls.Workbooks.Close;
End;
Except
on E: Exception do
WriteToLog(E.Message);
End;
end;
Думаю, что код простой и комментировать нечего. Остановлюсь только на строке проверки версии MS Excel. xls.Version возвращает номер версии MS Excel в виде строки, где цифры разделены точкой (например, "11.0" для Excel 2003, "12.0" для Excel 2007...), поэтому, чтобы получить номер версии в виде числа его необходимо преобразовать следующим способом:
StrToFloat(StringReplace(xls.Version, '.', DecimalSeparator, []))
- XLSX - стандартный формат файлов Excel 2007-2010 на основе XML;
- XLSM - формат Excel 2007-2010 на основе XML с поддержкой макросов (в отличие от XLSX он позволяет сохранять код макросов MS Visual Basic для приложений (VBA) и листы макросов MS Excel 4.0 (XLM));
- XLSB - формат двоичных файлов Excel 2007-2010 (BIFF12).
Ни одна из библиотек для работы с файлами Excel в Delphi не поддерживает XLSB-формат. Например, XLSReadWrite поддерживает только XLSX, а авторы TMS FlexCel вообще не могут сказать, когда у них будет поддержка формата Excel 2007 и будет ли вообще. Поэтому, что бы конвертировать файлы Excel в XLSB-формат необходимо использовать OLE:
Var
xls: OleVariant;
...
Const
// formats in Excel 2007-2010
xlExcel12 = 50; // XLSB
xlOpenXMLWorkbook = 51; // XLSX
xlOpenXMLWorkbookMacroEnabled = 52; // XLSM
xlExcel8 = 56; // XLS (export to Excel 97-2003)
...
Procedure XYZ.ConvertFilesToXLSB(slFiles: TStringList);
Var
iFile: Integer;
begin
Try
Try
xls := CreateOleObject('Excel.Application');
xls.DisplayAlerts := False;
If StrToFloat(StringReplace(xls.Version, '.', DecimalSeparator, [])) < 12
then WriteToLog('Error! Requires Excel 2007/2010')
else for iFile := 0 to slFiles.Count-1 do
ConvertToXLSB(slFiles[iFile]);
Finally
xls.Quit;
xls := UnAssigned;
End;
Except
on E: Exception do
WriteToLog(E.Message);
End;
end;
Где ConvertToXLSB:
Procedure XYZ.ConvertToXLSB(sFileName: String);
Var
sFileNameTo: String;
begin
sFileName := ExpandFileName(sFileName);
sFileNameTo := ChangeFileExt(sFileName, '.xlsb');
Try
Try
xls.Workbooks.Open(sFileName);
xls.ActiveWorkbook.SaveAs(Filename := sFileNameTo, FileFormat := xlExcel12);
Finally
xls.Workbooks.Close;
End;
Except
on E: Exception do
WriteToLog(E.Message);
End;
end;
Думаю, что код простой и комментировать нечего. Остановлюсь только на строке проверки версии MS Excel. xls.Version возвращает номер версии MS Excel в виде строки, где цифры разделены точкой (например, "11.0" для Excel 2003, "12.0" для Excel 2007...), поэтому, чтобы получить номер версии в виде числа его необходимо преобразовать следующим способом:
StrToFloat(StringReplace(xls.Version, '.', DecimalSeparator, []))
Подписаться на:
Сообщения (Atom)