Показать сообщение отдельно
  #17  
Старый 15.02.2017, 16:18
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Не знаю, отпишется ли ТС. На всякий случай отпишусь я.
Найдено рабочее решение: Программа-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.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием