Q&A

  • Excel 제어하기
엑셀에서 시트추가를 눌려서 특정 양식을 여는 것을 매크로로 해서 보니까

Sheets.Add Type:= 'a.xlt'

라구 나오던디

이걸 델파이에서 구현하려면 어떻게 해야 하나요?

Excel.WorkBooks.Add( 'a.xlt' );

로 하니까 새로운 엑셀창이 하나 열리더라구요...

걍 기존의 엑셀에 a.xlt를 하나의 시트로 추가해서 열고 싶거든요...

우찌 하면 되는지????

글구 걍 시트를 추가하면 앞에 추가되는데 뒤에 추가할려면????
3  COMMENTS
  • Profile
    구창민 2004.12.19 03:08
    Excel.WorkBooks.Open('a.xlt') 으로 해서 한번 해보세요..

    즐거운 프로그래밍 하시구요~


  • Profile
    ㉳㉥ㅗ㉣ㅐ㉧ㅛ 2004.12.20 17:59
    물론 해봤죠...근디 새로 WorkBook를 여는 것이 하니구 단순하게 Sheet를 추가하고 싶거든요...엑셀에서 Sheet 추가하듯이....
    근디 그것이 특정한 양식을 가진 Sheet였슴 한다는...


  • Profile
    구창민 2004.12.20 19:50
    아래 내용을 참고 해 보세요..

    Sheet 를 추가하는 형식을 뉴스그룹에서 검색해서 나온 결과물 중에 하나입니다.

    참고하시고, 즐거운 프로그래밍 하세요~

    procedure TfrmMainLanck.sbtnPrinFormClick(Sender: TObject);
    var Excel, Sheet : variant;
        ActiveDataSet : TDataSet;
        T : TBookMark;
        Row,Col,i : longint;
    begin
      if ActiveMDIChild=nil then
       begin
        Application.MessageBox('Нет активных окон','ВНИМАНИЕ !',0);
        Exit;
       end;
      if not(ActiveMDIChild.ActiveControl is TDBGrid) then
       begin
        Application.MessageBox('Установите фокус на набор данных','ВНИМАНИЕ
    !',0);
        Exit;
       end;
      ActiveDataSet:=(ActiveMDIChild.ActiveControl as
    TDBGrid).DataSource.DataSet;
    //
      if SetThreadLocale($409) then          // Работаем английскими
    командами
       begin
        try
         Excel:=GetActiveOleObject('Excel.Application'); // Попробовать
    найти если есть
        except
         Excel:=CreateOleObject('Excel.Application');  // Создать экземпляр
    Excel
        end;
        try
         Excel.Visible:=true;
         Sheet:=Excel.Workbooks.Add(-4167);           // Создать экземпляр
    Sheet
        except
         Application.MessageBox('Не удается открыть Excel','ВНИМАНИЕ !',0);
         Exit;
        end;
        T:=ActiveDataSet.GetBookmark;
        ActiveDataSet.DisableControls;
        ActiveDataSet.First;
        // Вывести заголовки строк
        Col:=1;
        for i:=0 to ActiveDataSet.FieldCount-1 do
         begin
          if ActiveDataSet.Fields[i].Visible then
           begin
          
    Sheet.ActiveSheet.Cells[1,Col].Value:=ActiveDataSet.Fields[i].DisplayName;
          
    Sheet.ActiveSheet.Cells[1,Col].ColumnWidth:=ActiveDataSet.Fields[i].DisplayWidth;
            Inc(Col);
           end;
         end;
        Row:=3;                      // Первая строка
        while not(ActiveDataSet.EOF) do
         begin
          Col:=1;
          for i:=0 to ActiveDataSet.FieldCount-1 do
           begin
            if ActiveDataSet.Fields[i].Visible then
             begin
            
    Sheet.ActiveSheet.Cells[Row,Col].Value:=ActiveDataSet.Fields[i].AsString;
              Inc(Col);
             end;
           end;
          ActiveDataSet.Next;
          Inc(Row);
         end;
        ActiveDataSet.GotoBookmark(T);
        ActiveDataSet.EnableControls;
        ActiveDataSet.FreeBookmark(T);
       end
      else               // Если не удалось установить работу с английскими
    командами
       begin
        Application.MessageBox('Не удается локализовать Excel','ВНИМАНИЕ
    !',0);
        Exit;
       end;
    end;