На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Delphi и Excel 2007
    Здравствуйте!
    у меня такая проблема...в 2003 офисе этот кусок нормально работает:
    ExpandedWrap disabled
      VSheet3.ChartObjects[2].Chart.SetSourceData(
        VSheet2.Range[VSheet2.Cells[countshop + 5,4],
        VSheet2.Cells[countshop + 5,RowItogo-1]], xlRows);


    но в 2007 ругается, что что Член группы не найден

    Подскажите пожалуйста в чём проблема и как её решить.

    Заранее признателен
      Фактически здесь три COM-вызова.
      Их надо поочереди выполнить и сразу станет ясно на какой именно операции проблема.
      ExpandedWrap disabled
           {  var X1, X2: OleVariant; }
           X1 := VSheet2.Range[VSheet2.Cells[countshop + 5,4];
           X2 := VSheet2.Cells[countshop + 5,RowItogo-1];
           VSheet3.ChartObjects[2].Chart.SetSourceData( X1, X2, xlRows);

      Возможно индекс неверен или что-либо из этой серии.

      Добавлено
      Даже не больше чем три: вместо X1 := ... еще детальнее сделать :
      ExpandedWrap disabled
           X1 := VSheet2.Cells[countshop + 5,4];
           X1 := VSheet2.Range[ X1 ];
        Уважаемый RuSA!
        разбил этот кусок как Вы посоветовали, ошибку выдаёт на
        ExpandedWrap disabled
          X1 := VSheet2.Range[ X1 ];

        OLE error 800A03EC

        подскажите пожалуйста как это исправить...в 2003 офисе же работает

        Добавлено
        хотя в 2003 офисе при данном разбитии операторов именно на этом же месте вылазиет та же самая ошибка....может как то неверно разбито?
          ребята если я не ошибаюсь то 2007 очень сильно отличается от 2003 даже форматы файлов не совместимы...
            Цитата Galiaf @
            ребята если я не ошибаюсь то 2007 очень сильно отличается от 2003 даже форматы файлов не совместимы...

            Похоже.
            Тогда можно сделвать так:
            1) самое простое - создать аналогичный код на встроенном в Excel VBScript (макросы/редактировать ...),
            затем перевести этот код на Delphi.
            2) найти интерфейсы для Office2007 (наподобии файла из поставки Delphi "%Delphi%\Ocx\Servers\Office2000.pas" и работать
            через них, а не через IDispatch.
              M
              lidhen
              не лезь в чужую ветку со своими вопросами
                lidhen, по окуратнее на поворотах! Новую тему создать, неужели так сложно?
                  Цитата Galiaf @
                  ребята если я не ошибаюсь то 2007 очень сильно отличается от 2003 даже форматы файлов не совместимы...

                  Не очень он отличается. Писал приложение, формирующее отчет в Excell. Отчет довольно серьезный. А кроме этого всё форматирование хранится не в отдельном шаблоне, а создается программно (знаю, извращение, но тогда так надо было) .
                  Так вот - когда запустил программу на компьютере с 2007-м офисом - всё отлично заработало с 1-го раза.

                  Добавлено
                  вместо этого
                  ExpandedWrap disabled
                     X1 := VSheet2.Cells[countshop + 5,4];
                     X1 := VSheet2.Range[ X1 ];

                  лучше использовать вот это
                  ExpandedWrap disabled
                     X1 := VSheet2.Cells[countshop + 5,4];
                     X1 := VSheet2.Range[ X1,X1 ];

                  Я вообще не знаю, как с одним аргументом работало.
                    Цитата ScoobyDoo @
                    Здравствуйте!
                    у меня такая проблема...в 2003 офисе этот кусок нормально работает:
                    ExpandedWrap disabled
                      VSheet3.ChartObjects[2].Chart.SetSourceData(
                        VSheet2.Range[VSheet2.Cells[countshop + 5,4],
                        VSheet2.Cells[countshop + 5,RowItogo-1]], xlRows);


                    но в 2007 ругается, что что Член группы не найден

                    Подскажите пожалуйста в чём проблема и как её решить.

                    Заранее признателен

                    это проблема решилась просто...надо было только у ChartObjects[2] квадратные скобки заменит на круглые.

                    дальше возникла следующая проблема:

                    ExpandedWrap disabled
                      v5 := v1.Range[v1.Cells[HomeRow-1,HomeColumn], v1.Cells[HomeRow-1,Column-1]];
                       
                          for i := 1 to 5 do
                            begin
                              Form1.App.Charts[i].SeriesCollection.[B]Item[1][/B].XValues := v5;
                              Form1.App.Charts[i].HasLegend := False;
                            end;

                    этот отрывок кода выдаёт ту же ошибку Член группы не найден.

                    Путём разбиения определил, что ругается именно на выделенный жирным Item[1].
                    Если меняю скобки на круглые, то ошибка меняется на несовпадение типов данных.

                    Где то в инете увидел, что можно использовать без итема следующим образом
                    ExpandedWrap disabled
                      Form1.App.Charts[i].SeriesCollection(1).XValues := v5;

                    но так же в случае круглых скопок ошибка не совпадения типов, а при [] - неверный член группы.

                    Помогите, пожалуйста, решить эту проблему. Опять же в 2003 офисе исходный код работает.
                      Помогите пожалуйста решить эту проблему :(
                        Неужели никто из знающих не читает эту ветку? уже не знаю что можно попробовать
                          Цитата ScoobyDoo @
                          Помогите пожалуйста решить эту проблем

                          Уже отвечали - например, см. сообщ. #5
                            Цитата RuSA @
                            Цитата ScoobyDoo @
                            Помогите пожалуйста решить эту проблем

                            Уже отвечали - например, см. сообщ. #5

                            ну я и следовал первому пункту в 5м посте...при редактировании макроса тоже самое нормально работает...а в дельфие нет :(
                              Цитата ScoobyDoo @
                              ... в случае круглых скопок ошибка не совпадения типов,

                              так надо проверить в каком месте несовпадение. Возможно некорректно присваивается значение для XValues !
                              Можно проверить чтением:
                              ExpandedWrap disabled
                                   {xV: OleVariant; }
                                   xV :=  Form1.App.Charts[i].SeriesCollection.Item(0).XValues;
                                Цитата RuSA @
                                Цитата ScoobyDoo @
                                ... в случае круглых скопок ошибка не совпадения типов,

                                так надо проверить в каком месте несовпадение. Возможно некорректно присваивается значение для XValues !
                                Можно проверить чтением:
                                ExpandedWrap disabled
                                     {xV: OleVariant; }
                                     xV :=  Form1.App.Charts[i].SeriesCollection.Item(0).XValues;

                                Извините, не понял...как проверить чтением?
                                закомментировал
                                ExpandedWrap disabled
                                  Form1.App.Charts[i].SeriesCollection.[B]Item[1][/B].XValues := v5;
                                  Form1.App.Charts[i].HasLegend := False;

                                и вставил
                                ExpandedWrap disabled
                                  xV :=  Form1.App.Charts[i].SeriesCollection.Item(0).XValues;

                                - выдало ошибку что то типа неверной адресации.
                                заменил 0 на 1:
                                ExpandedWrap disabled
                                  xV :=  Form1.App.Charts[i].SeriesCollection.Item(1).XValues;

                                - работает нормально, без ошибок...но что это даёт?
                                  Цитата ScoobyDoo @

                                  заменил 0 на 1:
                                  xV := Form1.App.Charts[i].SeriesCollection.Item(1).XValues;

                                  - работает нормально, без ошибок...но что это даёт?


                                  А вот что:
                                  1) индексация Form1.App.Charts[i].SeriesCollection.Item(...) начинается от единицы (у Масдая все через одно место);
                                  2) выражение Form1.App.Charts[i].SeriesCollection.Item(1).XValues корректно отработано !

                                  Следовательно исходная проблема выражения:
                                  Form1.App.Charts[i].SeriesCollection.Item(1).XValues := v5;
                                  в некорректной правой части. Значение v5 некорретно !
                                    Цитата RuSA @
                                    Цитата ScoobyDoo @

                                    заменил 0 на 1:
                                    xV := Form1.App.Charts[i].SeriesCollection.Item(1).XValues;

                                    - работает нормально, без ошибок...но что это даёт?


                                    А вот что:
                                    1) индексация Form1.App.Charts[i].SeriesCollection.Item(...) начинается от единицы (у Масдая все через одно место);
                                    2) выражение Form1.App.Charts[i].SeriesCollection.Item(1).XValues корректно отработано !

                                    Следовательно исходная проблема выражения:
                                    Form1.App.Charts[i].SeriesCollection.Item(1).XValues := v5;
                                    в некорректной правой части. Значение v5 некорретно !

                                    Каким образом оно может быть некоректно? если он просто получается:
                                    ExpandedWrap disabled
                                      v5 := v1.Range[v1.Cells[HomeRow-1,HomeColumn], v1.Cells[HomeRow-1,Column-1]];


                                    извините, но просто не понимаю...что тут как надо исправить, чтобы заработало? ведь в 2003 офисе всё работает
                                      Цитата ScoobyDoo @
                                      Каким образом оно может быть некоректно?

                                      Имея в виду выражение (1):
                                      ExpandedWrap disabled
                                           Form1.App.Charts[i].SeriesCollection.Item(1).XValues := v5;

                                      рассмотрим только факты. В силу того, что выражение слева корректно, потому что:
                                      Цитата RuSA @
                                      xV := Form1.App.Charts[i].SeriesCollection.Item(1).XValues;
                                      - работает нормально, без ошибок

                                      , а присвоение (1) нет, причем с ошибкой "несовпадение типов данных", ясно что проблема в правой части, либо
                                      слева надо прописать что-то еще, например .Range или .Value:
                                      ExpandedWrap disabled
                                           Form1.App.Charts[i].SeriesCollection.Item(1).XValues.Range := v5;

                                      ;)
                                      P.S. Такое происходит потому-что "дятел" VB самостоятельно может использовать .Value или более обощенно - "свойство по умолчанию"
                                      для данного объекта, когда посчитает нужным. Именно поэтому (и не только), считаю что на VB пишут мазохисты :)
                                        Цитата RuSA @
                                        Цитата ScoobyDoo @
                                        Каким образом оно может быть некоректно?

                                        Имея в виду выражение (1):
                                        ExpandedWrap disabled
                                             Form1.App.Charts[i].SeriesCollection.Item(1).XValues := v5;

                                        рассмотрим только факты. В силу того, что выражение слева корректно, потому что:
                                        Цитата RuSA @
                                        xV := Form1.App.Charts[i].SeriesCollection.Item(1).XValues;
                                        - работает нормально, без ошибок

                                        , а присвоение (1) нет, причем с ошибкой "несовпадение типов данных", ясно что проблема в правой части, либо
                                        слева надо прописать что-то еще, например .Range или .Value:
                                        ExpandedWrap disabled
                                             Form1.App.Charts[i].SeriesCollection.Item(1).XValues.Range := v5;

                                        ;)
                                        P.S. Такое происходит потому-что "дятел" VB самостоятельно может использовать .Value или более обощенно - "свойство по умолчанию"
                                        для данного объекта, когда посчитает нужным. Именно поэтому (и не только), считаю что на VB пишут мазохисты :)

                                        Попробовал и
                                        ExpandedWrap disabled
                                             Form1.App.Charts[i].SeriesCollection.Item(1).XValues.Range := v5;
                                        ,
                                        и
                                        ExpandedWrap disabled
                                             Form1.App.Charts[i].SeriesCollection.Item(1).XValues.Value := v5;

                                        ...всё без толку...в этих случаях вылазиет ошибка
                                        Invalid variant operation

                                        Ну подсобите мне, пожалуйста....башка уже болит об стенку биться -(
                                          Раз экспериментировать не позволяет религия, предлагаю просто поискать ИНТЕРФЕЙСЫ для нужной версии Ofiice'а.
                                          И совсем отказаться от использования "диких" runtime OLE-вызовов через варианты.
                                          Это уже многие советовали давным давно. Будет все гораздо проще, т.к. контроль 95% проблем возьмет на себя компилятор.
                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                          0 пользователей:


                                          Рейтинг@Mail.ru
                                          [ Script execution time: 0,1407 ]   [ 16 queries used ]   [ Generated: 19.08.25, 01:20 GMT ]