Конференция "Corba" » Листы в excel [D7]
 
  • Дмитрий (21.04.09 09:22) [0]
    столкнулся с такой проблемой, что надо выводить данные за период, на каждую дату отдельный лист, у меня есть шаблон на 1 листе, так как период разный то получается разное количество листов в Excel, вот как сделать чтобы листы добавлялись и шаблон копировался, листы я добавлять разобрался, но они добавляются вперед и не могу понять их имена как к ним обратиться?
  • Сергей М. © (21.04.09 09:36) [1]

    > не могу понять их имена


    Имена новых листов по умолчанию те самые, которые ты видишь при их ручном добавлении в раб.книгу.
    Обращаться к листам можно и по именам и по их индексам в списке Sheets.
  • Дмитрий (21.04.09 09:43) [2]

    > Имена новых листов по умолчанию те самые, которые ты видишь
    > при их ручном добавлении в раб.книгу.
    > Обращаться к листам можно и по именам и по их индексам в
    > списке Sheets.

    sheet:=xl.workbooks[1].worksheets['Ëèñò'+inttostr(i)];
    так?
  • Влад (21.04.09 09:44) [3]
    Листы добавляю так:

       Worksheets("01").Copy After:=Worksheets("01")
       Worksheets("01 (2)").Name = adddays(i)


    где "01" - имя листа, который нужно размножить, а  adddays(i) - массив добавляемых имён
  • Дмитрий (21.04.09 09:47) [4]
    xl.workbooks[1].worksheets['лист'+inttostr(i)]:=xl.workbooks[1].worksheets['Лист1'];
    говорит член группы не найден
  • Дмитрий (21.04.09 10:32) [5]
    xl.Workbooks[1].Worksheets('"'+inttostr(DayOf(dt1.Date)+i-1)+'"').CopyAfter:= xl.Workbooks[1].Worksheets('"'+inttostr(DayOf(dt1.Date)+i-1)+'"');
         xl.Workbooks[1].Worksheets('"'+inttostr(DayOf(dt1.Date)+i-1)+'"').Name :='"'+inttostr(DayOf(dt1.Date)+i)+'"' ;
    почему не получается? член группы не найден, можете расписать а то я чего то не могу это понять
  • Сергей М. © (21.04.09 10:39) [6]
    xl.ActiveWorkbook.Worksheets.Item[такой-то лист]
  • Дмитрий (21.04.09 11:21) [7]

    > xl.ActiveWorkbook.Worksheets.Item[такой-то лист]

    теперь ругается на CopyAfter
  • Сергей М. © (21.04.09 11:28) [8]

    > ругается на CopyAfter


    Правильно ругается - нет такого метода у такого-то объекта
  • Дмитрий (21.04.09 11:37) [9]
    распишите пожалуйста как сделать уже в Делфи, не могу я понять как сделать чтобы:
    1 добавился лист
    2 копировал содержимое предыдущего
  • Сергей М. © (21.04.09 11:43) [10]
  • Влад (21.04.09 12:04) [11]

    > Дмитрий   (21.04.09 11:21) [7]
    > > xl.ActiveWorkbook.Worksheets.Item[такой-то лист]
    > теперь ругается на CopyAfter

    Пример из VBA.
    After:=Worksheets("01")

    это параметр.
  • Дмитрий (22.04.09 11:09) [12]

    > Пример из VBA. After:=Worksheets("01") это параметр.

    я пользуюсь макросами, но этот не работает там
    Народ помогите пожалуйста не могу понять как, мозг с учебой и работой уже кипит,
    пользуюсь я не компонентами а создаю все в ручную, многое вообще разница
    xl:=CreateOleObject('Excel.Application');
        xl.Visible:=true;
        xl.Workbooks.Open('C:\AB\forma.xls');
    вот начинается и потом
    надо только копировать первый лист и в конец его и назвать по дню
  • Дмитрий (22.04.09 11:17) [13]
    Sheets("лист1").Select
       Sheets("лист1").Copy Before:=Sheets(1)
       Sheets("лист1 (2)").Select
       Sheets("лист1 (2)").Move Before:=Sheets(3)
    вот это как в делфи перекинуть особо интересует с пробелом в Copy Before Move Before
  • Дмитрий (22.04.09 12:14) [14]
    все проблема решена, я сделал 31 лист (максимально дней в месяце) и потом видимость фэлш делаю за те даты которые не нужны
  • Сергей М. © (22.04.09 13:17) [15]

    > сделал 31 лист (максимально дней в месяце) и потом видимость
    > фэлш


    Это называется "удалил гланды через задний проход")
  • Влад (23.04.09 08:45) [16]

    > Сергей М. ©   (22.04.09 13:17) [15]
    > > сделал 31 лист (максимально дней в месяце) и потом видимость
    > > фэлш
    > Это называется "удалил гланды через задний проход")

    Это называется "После долгих мучений сделать всё по програмистски - сделал всё по нормальному" - imho очень верное и быстрое решение :)


    > вот это как в делфи перекинуть особо интересует с пробелом в Copy Before Move Before

    Еще раз вникнуть в это -
    After:=Worksheets("01")

    это параметр.

    Нужно рассмотреть внимательно метод
    Copy

     в классе
    TExcelWorksheet

    из
    ExcelXP.pas

    .
    В нашем случае
    Copy

    выглядит так:
       procedure Copy(Before: OleVariant); overload;
       procedure Copy(Before: OleVariant; After: OleVariant); overload;
       procedure Copy(Before: OleVariant; After: OleVariant; lcid: Integer); overload;



    Таким образом нужно как параметр подставить ссылку на нужный лист :)
 
Конференция "Corba" » Листы в excel [D7]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]