Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2009, 19:35   #1
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
Радость при работе с Excel не работает кусок кода

Вот полный код

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
XL : variant;
f1 : tstringlist;
i,k : integer;
gname, jar : string;
b: boolean;
begin

  // Excel initialization
  XL:= CreateOLEObject('Excel.Application');
  XL.workbooks.open('d:\work\leeloo\compatibility.xls');
  XL.visible := false;

  //stringlist work
  f1:= tstringlist.Create;
    gname:= inputbox('gamename', 'Enter full gamename','');
    f1.Add('<?xml version="1.0" encoding="ISO-8859-1"?>');
    f1.Add('<gamematrix basedCommonMatrix="1.6.0" created="8.4.2009" release-date="7.4.2009" title="'+gname+
    '" totalSupportedDevices="738" version="1.0.0">');
    f1.add('    <languages>');
    f1.Add('        <supported>en</supported>');
    f1.add('    </languages>');
    i:= 2;
    k:= 2;
    b:= false;

  // useful code
  repeat

    repeat
      b:= XL.cells[i,9].value = XL.cells[i+1,9].value;
      inc(i);
    until b = false;

      jar:= XL.cells[i-1,j].value;
      f1.Add('    <game-file name="'+jar+'">');

    while k < i do begin
      f1.add('        <phone cldc="'+XL.cells[k,1]+
      '" display="'+XL.cells[k,2]+'" manufacturer="'+
      XL.cells[k,3]+'" midp="'+XL.cells[k,4]+'" model="'+
      XL.cells[k,5]+'" speed="'+XL.cells[k,6]+'" tested="'+
      XL.cells[k,7]+'" userAgent="'+XL.cells[k,8]+'"/>');
      inc(k);
    end;

    f1.add('    </game-file>');

  until XL.cells[i, 9].value = '';

  // finish and close
  f1.Add('</gamematrix>');
  f1.SaveToFile('d:\work\leeloo\compatibility.xml');
  f1.Free;
  XL.Quit;
end;
Код:
    
while k < i do begin
      f1.add('        <phone cldc="'+XL.cells[k,1]+
      '" display="'+XL.cells[k,2]+'" manufacturer="'+
      XL.cells[k,3]+'" midp="'+XL.cells[k,4]+'" model="'+
      XL.cells[k,5]+'" speed="'+XL.cells[k,6]+'" tested="'+
      XL.cells[k,7]+'" userAgent="'+XL.cells[k,8]+'"/>');
      inc(k);
    end;
вот на этот кусочек ругается компилятор, подскажите пожалуйста в чём проблема
Tirendus вне форума Ответить с цитированием
Старый 22.07.2009, 19:48   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
вот на этот кусочек ругается компилятор
А как именно ругается ? Приведи подробнее ...
Может быть он ждет от тебя значений из ячеек а не сами ячейки ?
Код:
.... XL.cells[k,1].value  ....
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 22.07.2009 в 19:50.
Kotofff вне форума Ответить с цитированием
Старый 23.07.2009, 00:26   #3
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

рабочая программа на работе, завтра опробую со значениями, большое спасибо

хм... попробовал с value, но ничего не получилось, при том компилятор не выделяет строки при это "ошибке". Говорит только, что не может переконвертировать string в double, при этом код без этой части

Код:
      f1.add('        <phone cldc="'+XL.cells[k,1]+
      '" display="'+XL.cells[k,2]+'" manufacturer="'+
      XL.cells[k,3]+'" midp="'+XL.cells[k,4]+'" model="'+
      XL.cells[k,5]+'" speed="'+XL.cells[k,6]+'" tested="'+
      XL.cells[k,7]+'" userAgent="'+XL.cells[k,8]+'"/>');
работает идеально

И почему-то на разные ячейки он по разному реагирует, например если я оставляю XL.cells[k,1].value, то всё работает, хотя в каком-то булеановском режиме, пустые ячейки отмечены как 0, а заполненные, как 1, хотя мне нужны именно их значения, например пустая ячейка XL.cells[k,1].value должна в конечном документе выглядеть как
phone cldc = "". Я приложил исходник и рабочую базу, если не лень, пожалуйста посмотрите, возможно я чего-то не понимаю

походу я понял, там разбежности в типах данных, например в столбце A данные 1.1, 1.0 и т.п., типа float. А в столбце B типы данных string потому, что когда указываем дисплей, всегда есть буква x посерединке... то есть с этим я разберусь, но вот другая проблема возникла... всё, что мне нужно - это значения из этих ячеек, мне всё равно какой в них тип, по идее, мне нужно вывести в текстовик все в виде string'ов, но если я пишу для столбца A floattostr(XL.cells[k,1].value), то все запятые убираются (там чередуются запятые и точки, как когда), а все пустые ячейки становятся нулями, а это уж точно не то, что нужно.. может кто-нибудь подсказать как сделать так, что б в текстовик значение float переносилось как обычная строка, безо всяких сокращений, обрезаний и т.п.?
Кстати есть еще один столбец с названиями мобильных телефонов, и там эти типы данных чередуются, где integer, где string, то есть никак не могу их переконвертировать и они вообще не копируються... При этом в экселе пробовал поставить всем ячейкам тип данных строчный, не помогло..

плиз хелп!
Вложения
Тип файла: zip proj.zip (227.5 Кб, 9 просмотров)

Последний раз редактировалось Stilet; 23.07.2009 в 12:48.
Tirendus вне форума Ответить с цитированием
Старый 23.07.2009, 13:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Tirendus
Во-первых: Приводи типы явно.
Код:
 while k < i do begin
      f1.add('        <phone cldc="'+String(XL.cells[k,1]));
      inc(k);
    end;
Во-вторых:
Я бы пустоту в ячейке проверял так:
Код:
 until VarIsEmpty(XL.cells[i, j]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.07.2009, 13:13   #5
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Цитата:
Во-первых: Приводи типы явно.
супер так очевидно, большое спасибо, заработало.

Цитата:
Я бы пустоту в ячейке проверял так:
спасибо, запомню
Tirendus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бешеное потребление виртуальной памяти при работе в Excel 2003 dikdm Microsoft Office Excel 2 28.04.2009 13:10
Нужен ли данный кусок кода? iankov PHP 4 23.04.2009 20:49
кусок кода считать не из тестового файла а из Tmemo Stanislav Общие вопросы Delphi 8 07.01.2008 22:12
помогите понять кусок кода Arteom БД в Delphi 7 31.08.2007 08:51
Есть кусок кода komarevsky Общие вопросы Delphi 7 19.07.2007 17:43