![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
||||
|
||||
|
Цитата:
|
|
#17
|
||||
|
||||
|
Не знаю, отпишется ли ТС. На всякий случай отпишусь я.
Найдено рабочее решение: Программа-D2 и DLL-D7. Библиотечная функция получает страницу книги и координаты ячейки, где вставляется символ диаметра. Программа: Код:
uses
OleAuto;
type
_DoChangeSymbol = function (OleSheet: PVariant; Col, Row: Integer): Boolean; stdcall; //external 'ChangeSymbol.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
excel, wb, sh: Variant;
lib: THandle;
proc: _DoChangeSymbol;
begin
if OpenDialog1.Execute then
try
excel := CreateOleObject('Excel.Application');
excel.Visible := false;
excel.DisplayAlerts := false;
try
excel.WorkBooks.Open(OpenDialog1.FileName);
wb := excel.WorkBooks[ExtractFileName(OpenDialog1.FileName)];
sh := wb.WorkSheets[1];
sh.Cells[1, 1].Value := 'Outer d=12, Inner d=8';
lib := LoadLibrary('ChangeSymbol.dll');
if lib >= 32 then
begin
@proc := GetProcAddress(lib, 'DoChangeSymbol');
if @proc <> nil then proc(@sh, 1, 1);
//if proc(@sh, 1, 1) then ShowMessage('Yep!')
//else ShowMessage('Upssss....');
FreeLibrary(lib);
end;
wb.Save;
finally
excel.Quit;
sh := UnAssigned;
wb := UnAssigned;
excel := UnAssigned;
end;
except
raise Exception.Create('Error');
end;
ShowMessage('Done!');
end;Библиотека: Код:
library ChangeSymbol;
function DoChangeSymbol(OleSheet: PVariant; Col, Row: Integer): Boolean; stdcall;
var
i: Integer;
ws: WideString;
begin
try
ws := OleSheet^.Cells[Col, Row];
i := Pos('d=', ws);
while i > 0 do
begin
ws[i] := WideChar(216);
i := Pos('d=', ws);
end;
OleSheet^.Cells[Col, Row] := ws;
Result := True;
except
Result := False;
end;
end;
exports
DoChangeSymbol;
begin
end.Последний раз редактировалось dr. F.I.N., 15.02.2017 в 17:21. |
| Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
igr37 (15.02.2017)
| ||
|
#18
|
|||
|
|||
|
все вопрос закрыт - сделал с помощью DLL
Благодарю за помощь dr. F.I.N. ! |