Delphi excel подчеркнуть текст
Обновлено: 05.07.2024
Выручите пжлста.
Как реализовать частичное подчеркивание (например с 6-го по 10-ый символы), если в ячейке содержится не текст, а формула (например ="Итого: "&CуммаПрописью(А1))
ps. Сломали 3 головы уже
парвой кнопкой по ярлыку листа
исходный текст
вставьте в модуль листа этот
41001804815208 - ЮMoney бывш.Яндекс-кошелек благодарности за удачные советы и решения можно отправлять прямо сюда)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Насколько я понял это макрос выполняющийся при изменении значения в ячейке А5. Если в ячейку вписывать текст, то работает, а если формулу или числовое значение, то нифига. :`( Такой подход я уже пробовал.
Проблема в том, что если в ячейке формула и Start > 1, то подчеркивание не выполняется. Если Start=1, то не важно чему равен Length - подчеркивается всё содержимое ячейки.
Единственное до чего я добыдлокодился, это
1.копирование значения из исходной ячейки во временную
2.выполнение подчеркивания по нужным параметрам
3.Копирование значения временной ячейки в исходную с сохранением форматирования (Copy-PasteSpecial)
4.Очистка временной ячейки.
Но этот вариант совсем не айс, ибо формула в исходной ячейке теряется.
зы. Может возможно создать такой формат ячейки, который будет выводит значение в ячейке с частичным подчеркиванием? Есть ли в Excel что-то вроде HTML тэгов?
Последний раз редактировалось AesmaDiv; 04.12.2010 в 16:08 .Кароче пришел к выводу что это таки невозможно. Решил выйти из положения следующим образом:
Есть три ячейки - А1,А2 и А3
В ячейке А1 находится числовое значение (123)
В ячейке А2 находится формула (="Итого: "&СуммаПрописью(А1)), формат ячейки (" ;;;"), т.е. текст скрыт.
В ячейку А3 выводится текст посредством выполнения макроса:
Макрос завязан на изменение ячейки А2 (Спасибо IgorGO), с условием соответствия формата ячейки. Решил обойтись без привязки к адресам ибо адреса могут быть разные и каждый раз лезть в код. ну вы понели.
В результате ячейка А3 отображает - Итого: Сто двадцать три
Однако, каждый раз при изменении значения в А1, нужно щелкать по А2. Не фонтан. Вопрос:
1. Как можно привязать макрос к конкретной ячейке без указания адреса?
2. Как распространить действие этого макроса на всю книгу?
Тут иногда бывают вопросы о том, как можно из Delphi работать с документами Excel. Решил написать такую инструкцию, где рассказано об основных действиях.
Для работы с OLE нужно к строке Uses добавить модуль ComObj. Так же нужно объявить переменную типа Variant.
Что бы начать работу с Экселем, нужно создать OLE объект:
Ap := CreateOleObject('Excel.Application');
После этого нужно либо создать новую книгу:
Ap.Workbooks.Add;
либо открыть файл:
Ap.Workbooks.Open(<имя файла>);
Что бы открыть файл только для чтения, нужно указать:
Ap.Workbooks.Open(<имя файла>,0,True);
где True и указывает, что файл открывается только для чтения.
По умолчанию окно Excel не будет отображаться. что бы оно появилось, нужно выполнить
Ap.Visible := True;
Но это желательно делать в последний момент, т.к. когда окно видимое, то все изменения в нём происходят медленнее. Поэтому, лучше оставить его невидимым, сделать там все необходимые изменения, и только после этого сделать его видимым или закрыть. Если вы его оставите невидимым, то процесс EXCEL.EXE останется висеть в памяти, даже когда будет закрыто ваше приложение.
Что бы записать или прочитать содержимое ячейки можно использовать Ap.Range[<имя ячейки>] или Ap.Cells[<позиция по Y>,<позиция по X>]
Ap.Range['D1'] := 'Ляляля';
Ap.Cells[1,4] := 'Ляляля';
Эти две строки выполняют одно и тоже действие: записывают строку "Ляляля" в ячейку D1
Читать значение из ячейки таким же образом:
S := Ap.Range['D1'];
или
S := Ap.Cells[1,4];
Так же можно записывать значение сразу в несколько ячеек. можно перечислить через точку с запятой или указать диапазон через двоеточие:
Всё это можно применять как к отдельным ячейкам, так и к группам ячеек, строк, столбцов и т.п. Я буду показывать примеры на Ap.Cells. но Вам никто не мешает использовать Ap.Range['D5'], Ap.Range['A2:E8'], Ap.Columns['B:F'] и т.п.
Наверное, вы обращали внимание, что в новом документе появляются 3 листа (их список отображается внизу программы Excel). По умолчанию, мы работаем с активным листом (сразу после создания это первый лист). Но при желании, мы можем использовать и другие листы. Доступ к ним осуществляется с помощью Worksheets[<номер листа>]. Обратите внимание, что нумеруются они начиная с 1 (а не с 0, как привыкли все программисты).
Ниже приведён более полный список размеров бумаги из модуля ExcelXP:
Выделение
Excel.Range[Excel.Cells[1, 1], Excel.Cells[5, 3]].Select;
а также любые другие комбинации выбора ячейки с окончанием .select - выбор 1 или группы ячеек
С выбранными ячейками возможны следующие преобразования:
1) объединение ячеек
Excel.Selection.MergeCells:=True;
2) перенос по словам
Excel.Selection.WrapText:=True;
3) горизонтальное выравнивание
Excel.Selection.HorizontalAlignment:=3;
при присваивании значения 1 используется выравнивание по умолчанию, при 2 - выравнивание слева, 3 - по центру, 4 - справа.
4) вериткальное выравнивание
Excel.Selection.VerticalAlignment:=1;
присваиваемые значения аналогичны горизонтальному выравниванию.
5) граница для ячеек
Excel.Selection.Borders.LineStyle:=1;
При значении 1 границы ячеек рисуются тонкими сплошными линиями.
Кроме этого можно указать значения для свойства Borders, например, равное 3. Тогда установится только верхняя граница для блока выделения:
Excel.Selection.Borders[3].LineStyle:=1;
Значение свойства Borders задает различную комбинацию граней ячеек.
В обоих случаях можно использовать значения в диапазоне от 1 до 10. ]
Установка пароля для активной книги может быть произведена следующим образом:
где pass - устанавливаемый пароль на книгу.
Снятие пароля с книги аналогично, использовуем команду
где pass - пароль, установленный для защиты книги.
Установка и снятие пароля для активного листа книги Excel производится командами
где pass - пароль, установленный для защиты книги.
Вспомогательные операции в EXCEL
Удаление строк со сдвигом вверх:
при выполнении данных действий будут удалены строки с 5 по 15.
Установка закрепления области на активном листе Excel
Спасибо VampireKB за дополнения
Существует ли инструкция по размещению проекта Delphi на GitHub?
После создания репозитория непонятно, что делать.
Как в Delphi сделать Excel таблицу, не употребляя компонент TStringGrid и связать ее с Delphi
Как в Delphi сделать Excel таблицу, не употребляя компонент TStringGrid и связать ее с Delphi?
Использование БД в Delphi
Привет. Возникла необходимость подключить базу данных к Delphi для хранения вычислений полученных в.
Использование Interop Excel
Добрый день! Есть приложение, которое должно вносить определенные изменения в Excel файл. .
Использование case Delphi
имеется код Case Combobox1.itemIndex of 0:begin Edit1.Clear; Form_login.Visible:=false;.
Использование stringgrid-Delphi
Дан массив А размера N. Сформировать два новых массива В и С: в массив В записать все положительные.
Использование интерфейсов из С++ в Delphi
Здравствуйте. Пытаюсь прикрутить Steamworks API напрямую к делфи, и возникла проблема. Функция.
Для полноты картины нужно еще описать способ быстрого форматирования ячеек и показать скорость работы XLSReadWrite
Я для своих задач использую XML SpreadSheet. С радостью пересел бы на что-то иное.
Bogdan , вынеси на форуме просьбу о создании подобного раздела. Если Влад одобрит, то создаст. Можно пообсуждать конечно, в плане даже проверенных, рабочих дистрибутивов, общих вопросов, того-же FireMonkey и т.д. У меня есть пара дистрибутивов, но все руки не доходили, вечерком сегодня попробую, если инстол пройдет нормально, обязательно отпишусь с сылками от куда их брал.
Влад, надеюсь до конца дня скачаешь и отпишешься, ну или хотябы завтра, а скорость у тебя, относительно моей вообще в 3 раза выше ) думаю до завтра точно осилишь оставшиеся 20 % )
// Да прибудет с тобой сила, Влад!
Алекс, это переменная типа Variant
Чтение данных из Excel
ExcelApp.Workbooks.Open(edFile.Text); почему ругается наэту функцию?
Доброго времени суток. Подскажите как записать данные в разные столбики с разными именами
Я работаю с БД FireBird и экспортирую из рекордсета. и если там попадаются русские буквы, то он не пишет в ячейку вообще ничего
Спасибо за информацию. Вы очень мне помогли.
Рекомендуемая библиотека XLSReadWrite стоит 295 евро. Я как-то не готов пока к такой покупке.
Посоветуйте более доступные аналоги пожалуйста.
Как прочитать из документа EXCEL колонку, содержащую рисунок со штрих кодом, чтобы он прочитался как 13 цифр
Здравствуйте, Владислав. Честно говоря, я-не программист, но уж очень хочется для себя постичь эту тему. Много времени провожу в Вашем блоге, но пока получается стряпать только методом копи-паста. На данный момент работаю над программой, объединяющей данные из 2х документов типа Exele. Задача состоит в том чтоб открыть 2 документа, стартовать с определенной ячейки второго документа, получив ее значение, искать его в первом документе. Оба состоят из длинного списка на одном листе. Т.к. только начинаю программировать, выбрал способ по одной ячейке- скорость не особо важна. Но вот незадача- получив значение из второго документа, не пойму как активировать первый и искать в … Подробнее »
В этой статье я познакомлю вас как работать с MS Excel из Delphi. Данная статья может быть полезна людям, которые хотят научиться создавать различные отчеты в Excel из программ написанных на Delphi. Статья содержит справочные данные необходимые для работы с MS Excel. Здесь вы найдете информацию о том как:
- Подключить и правильно отключить интерфейс Excel;
- Как изменить размер, цвет и тип шрифта;
- Как выделить, объединить, заполнить и размножить диапазон ячеек;
- Как повернуть и отцентрировать текст;
- Как нарисовать границы ячеек;
- Как ввести формулу в ячейку и многое другое.
Работать будем через модуль ComObj, для этого в uses необходимо добавить модуль ComObj и модуль Excel_TLB (для MS Excel 2007).
Uses ……, ComObj, Excel_TLB;
Модуль Excel_TLB содержит необходимые константы для работы с Excel, его можно не подключать, но тогда придется в ручную прописывать значения всех используемых констант из этого модуля. Значения констант можно найти внутри модуля или в интернете, но для разных версий MS Excel они разные.
Внимание. Модуль Excel_TLB в других версиях MS Excel может называться по другому. Перед подключением модуля Excel_TLB, необходимо импортировать библиотеку Excel. Для этого выберите Component->Import Component->Import a Type Library-> находим MS Excel и следуем инструкциям.
В разделе описания переменных мы должны описать переменную типа Variant или OleVariant для подключения интерфейса Excel. Я описал переменную excel.
Form1: TForm1;
excel : variant; // Переменная в которой создаётся объект EXCEL
Создание документа
Внимание. Всегда когда создаете объект интерфейса, заключайте процедуру создания в модуль обработки ошибок:
try
создаем интерфейс;
формируем отчет;
освобождаем интерфейс;
Except
обрабатываем ошибки;
освобождаем интерфейс;
end;
Далее идет краткий справочник по основным функциям работы с EXCEL
// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts := false;
// создаем новый документ рабочую книгу
excel.WorkBooks.Add;
// Делаем его видимым данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет)
excel.Visible := true;
//задаем тип формул в формате R1C1
excel.Application.ReferenceStyle := xlR1C1;
// задаем тип формул в формате A1
excel.Application.ReferenceStyle := xlA1;
// задаем ширину первой и второй колонки
excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 10;
excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 20;
// Выравнивам первый ряд по центру по вертикали
excel.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := xlCenter;
// Выравнивам первый ряд по центру по горизонтали
excel.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := xlCenter;
// Выравнивам в ячейке по левому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 2].HorizontalAlignment := xlLeft;
// Выравнивам в ячейке по правому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 4].HorizontalAlignment := xlRight;
// Поворачиваем слова под углом 90 градусов для второго ряда
excel.WorkBooks[1].WorkSheets[1].Rows[2].Orientation := 90;
//рисуем границы выделенного диапазона левая
excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous; // стиль линии сплошная
excel.Selection.Borders[xlEdgeLeft].Weight := xlMedium;// толщина линии
//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeTop].Weight := xlMedium;
//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeBottom].Weight := xlMedium;
//рисуем границы выделенного диапазона правая
excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeRight].Weight := xlMedium;
//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders[xlInsideVertical].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideVertical].Weight := xlMedium;
//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders[xlInsideHorizontal].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideHorizontal].Weight := xlMedium;
//отключаем предупреждения, чтобы не задавал вопросов о сохранении и других
excel.DisplayAlerts := False;
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel := Unassigned;
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel := Unassigned;
end;
end;
После сформирования документа или возникновении ошибки вы должны правильно освободить интерфейсы.
Иначе при закрытии Excel он скрывается с экрана, но если открыть диспетчер задач он продолжает там висеть и если данный процесс не завершить , то при каждом новом запуске их будет накапливаться больше и больше, пока компьютер не начнет виснуть. Поэтому обязательно необходимо освобождать все интерфейсы с вязанные с Excel с его книгами и листами.
Например так:
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
sheet:=Unassigned; //интерфейс листа если он был создан
WorkBook := Unassigned;//интерфейс рабочей книги если он был создан
excel := Unassigned;//интерфейс самого предложения если он был создан
Ниже привожу пример вывода в Excel из Delphi таблицы умножения с подробными комментариями.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, comobj, StdCtrls, Excel_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
var
Form1: TForm1;
excel: variant; // Переменная в которой создаётся объект EXCEL
MyData: variant; // Переменная в которой формируется таблица умножения
i,j:integer;
implementation
//объявляем вариантный массив
MyData := VarArrayCreate([1,9,1,9],varVariant);
for I := 1 to 9 do
for J := 1 to 9 do
MyData[i,j]:=i*j;
Читайте также: