Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт из xls, openoffice 
:(
    Опции темы
opx
Дата 28.5.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



А что если стоит OpenOffice? Получиться перекинуть данные из xls?
Решил эту проблему так:
Код

function FileNameToURL(FileName:String):String;
  begin
  result:= '';
  if LowerCase(copy(FileName,1,8))<>'file:///' then
    result:= 'file:///';
  result:= result + StringReplace(FileName, '\', '/', [rfReplaceAll, rfIgnoreCase]);
end;

function ooCreateValue(ooName: string; ooData: variant): variant;
var
  ooReflection: variant;
begin
    ooReflection:= OpenCalc.createInstance('com.sun.star.reflection.CoreReflection');
    ooReflection.forName('com.sun.star.beans.PropertyValue').createObject(result);
    result.Name := ooName;
    result.Value:= ooData;
end;

procedure TfrmImXLS.Button1Click(Sender: TObject);
var ooParams:Variant;
    i,y:Integer;
begin
if OpenDialog1.Execute then begin
    Application.ProcessMessages;
    Cursor := crHourGlass;
    Edit1.Text := OpenDialog1.FileName;
//Создаем оле подключение
    OpenCalc := CreateOleObject('com.sun.star.ServiceManager');
    ooDesktop := OpenCalc.createInstance('com.sun.star.frame.Desktop');
//Записываем параметр для того, чтобы Calc был невидим
    ooParams := VarArrayCreate([0, 0], varVariant);
    ooParams[0] := ooCreateValue('Hidden', True);
    ooDocument := ooDesktop.LoadComponentFromURL(FileNameToURL(OpenDialog1.FileName), '_blank', 0, ooParams);
    ooSheets := ooDocument.getSheets;
    ComboBox1.Items.Clear;
    ComboBox1.Text := '';
    if ooSheets.count <> 0 then begin
//Помещаем наименование листов в Combobox1
    For i := 1 to ooSheets.count do begin
      ComboBox1.Items.Add(ooSheets.getByIndex(i-1).Name)
    end;
    end
    else begin
      ShowMessage('В данном документе нет листов');
    end;
    ComboBox1.Enabled := ComboBox1.Items.Count<>0;
    Cursor := crDefault;
end;
end;


Дальше идет беспорядочный код. Вкратце так:

Код

var oCell,omySheet,oCursor:Variant;
y:Integer;
begin
//Получаем количество используемых строк
omySheet := ooSheets.getByIndex(ComboBox1.ItemIndex);
oCell := omySheet.GetCellbyPosition( 0, 0 );
oCursor := omySheet.createCursorByRange(oCell);
oCursor.gotoEndOfUsedArea(false);
y := oCursor.RangeAddress.EndRow;
//И бежим по строкам считываем значение
For i :=0 to y do begin
  DataSet.Append; // Здесь мы ее перегоняем в бд Firebird 2.1 FibPlus'ами
  DataSet.FieldValues['NAME'] := omySheet.GetCellbyPosition(0,i).string;
  DataSet.FieldValues['CENA'] := omySheet.GetCellbyPosition(1,i).value;
  DataSet.Post;
end;



Думаю суть моей проблеммы ясна.
А может кто знает как без OLE это дело сделать (через какой-нить ODBC или JDBC)?


Это сообщение отредактировал(а) opx - 28.5.2009, 22:00
PM MAIL   Вверх
Akella
Дата 28.5.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Я перенёс Ваш вопрос и создал для него новую тему.
А теперь удосужтесь по-человечески описать проблему. smile 
А НЕ для телепатов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.