является распространенной задачей при работе с Excel из приложений, созданных с помощью Delphi или других языков программирования. В этом руководстве мы рассмотрим, как выполнить это с помощью Object Pascal в Delphi, используя компонент Clipbrd и объектную модель Excel.
Подключение к Excel и создание новой книги
Первый шаг - подключиться к Excel и создать новую книгу. Для этого мы будем использовать компонент CreateOLEObject из модуля System.Win.ComObj. Вот пример кода, который выполняет эти действия:
uses
Vcl.Clipbrd,
System.Win.ComObj;
var
xls, wb: OLEVariant;
begin
try
// Создаем экземпляр приложения Excel.
xls := CreateOLEObject('Excel.Application');
// Создаем новую книгу.
wb := xls.Workbooks.Add;
// Отображаем Excel.
xls.Visible := True;
except
on E: Exception do
begin
MessageDlg('Произошли проблемы.' + E.Exception.Message, mtWarning, [mbOk], 0);
end;
end;
end;
Копирование содержимого в буфер обмена
Прежде чем мы сможем вставить содержимое буфера обмена в Excel, нам нужно сначала скопировать что-то в буфер обмена. Для этого мы будем использовать компонент Clipbrd из модуля Vcl.Clipbrd. Вот пример кода, который копирует текст в буфер обмена:
Теперь, когда у нас есть содержимое в буфере обмена, мы можем вставить его в Excel. Для этого мы будем использовать метод Paste объекта ActiveSheet приложения Excel. Вот пример кода, который вставляет содержимое буфера обмена в активный лист Excel:
xls.ActiveSheet.Paste;
Полный пример кода
Вот полный пример кода, который копирует содержимое буфера обмена в Excel во время выполнения:
uses
Vcl.Clipbrd,
System.Win.ComObj;
var
xls, wb: OLEVariant;
begin
try
// Создаем экземпляр приложения Excel.
xls := CreateOLEObject('Excel.Application');
// Создаем новую книгу.
wb := xls.Workbooks.Add;
// Копируем текст в буфер обмена.
Clipboard.Clear;
Clipboard.AsText := 'Тестовый текст';
// Отображаем Excel.
xls.Visible := True;
// Вставляем содержимое буфера обмена в активный лист.
xls.ActiveSheet.Paste;
except
on E: Exception do
begin
MessageDlg('Произошли проблемы.' + E.Exception.Message, mtWarning, [mbOk], 0);
end;
end;
end;
Альтернативное решение
Если вы хотите избежать использования объектной модели Excel и хотите выполнить вставку содержимого буфера обмена непосредственно из кода, вы можете использовать функцию SendKeys из модуля Vcl.SysUtils. Вот пример кода, который копирует содержимое буфера обмена в Excel с использованием SendKeys:
uses
Vcl.SysUtils;
procedure CopyClipboardToExcel();
var
excelPath: string;
begin
// Определяем путь к Excel.
excelPath := 'C:\Program Files\Microsoft Office\Office16\EXCEL.EXE';
// Запускаем Excel с новой книгой.
ShellExec(0, excelPath, '/e', '', SW_SHOW, False);
// Ждем, пока Excel не будет готов.
Sleep(5000);
// Копируем текст в буфер обмена.
Clipboard.Clear;
Clipboard.AsText := 'Тестовый текст';
// Вставляем содержимое буфера обмена с помощью SendKeys.
SendKeys('^v');
// Ждем, пока вставка не будет завершена.
Sleep(5000);
end;
Обратите внимание, что это решение может работать нестабильно, так как оно depends on external factors such as the location of Excel on the system and the time it takes for Excel to launch and be ready to accept input.
Заключение
В этой статье мы рассмотрели, как копировать содержимое буфера обмена в Excel во время выполнения с помощью Object Pascal в Delphi. Мы рассмотрели два подхода: использование объектной модели Excel и использование функции SendKeys. Каждый из этих подходов имеет свои преимущества и недостатки, и выбор между ними будет dépendant на ваши конкретные требования и ограничения.
Копирование содержимого буфера обмена в Excel во время выполнения: руководство по Delphi с использованием Clipbrd и объектной модели Excel.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS