Вдохновленный топиком - http://www.sql.ru/forum/actualthread.as ... n%20object
стал разбираться с OpenOffice Calc. Вроде бы понял смысл "общения" с Calc'ом, но встали две проблемы, которые никак не могу решить.
Пожалуйста прошу помочь разобраться в чем я не прав. Написал вот такой код
- Код: Выделить всё
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
Document := StarDesktop.LoadComponentFromURL(
'private:factory/scalc', '_blank', 0,
VarArrayCreate([0, -1], varVariant));
MyStruct := StarOffice.Bridge_GetStruct('com.sun.star.table.BorderLine');
try
Sheets := Document.getSheets;
//Sheet := Sheets.getByName('Лист1');
Sheet := Sheets.getByIndex(0);
Cell := Sheet.getCellRangeByName('C10:C13');
Cell.setPropertyValue('CellBackColor', 255);
Cell.Merge(true);
Cell := Sheet.getCellByPosition(2, 9);
Cell.setString('Пробная строка');
finally
StarOffice := Unassigned;
end;
В результате в кальке русские буквы прописываются китайскими иероглифами. Ни одна из функций преобразования (UTF8ToSys, UTF8ToCP1251) не приводит к желаемому результату.
Вторая проблема, не могу открыть уже существующий файл. Код на открытие файла
- Код: Выделить всё
function ConvertToURL(FileName: string): string;
var
URL:string;
i:integer;
ch:char;
begin
URL:='';
for i:=1 to Length(FileName) do
begin
ch:=FileName[i];
case ch of
' ':URL:=URL+'%20';
'\':URL:=URL+'/';
else
URL:=URL+ch;
end;
end;
Result:='file://localhost/'+URL;
end;
FileName := ConvertToURL(ExtractFilePath(Application.ExeName)+'OOclient.ods');
if FileExists(ExtractFilePath(Application.ExeName)+'OOclient.ods') then begin
ShowMessage(FileName);
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
Document := StarDesktop.LoadComponentFromURL(
FileName, '_blank', 0,
VarArrayCreate([0, -1], varVariant));
end else
ShowMessage('File not found');
Сообщение звучит так: com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported one