Q&A

  • 엑셀변환과 넥셀 변환의 차이점이 있는지....부탁드립니다.
저는 이렇게 코딩을 했는데, 실행은 되지만 저장되지 않습니다.
고수님들의 도움이 필요합니다.

Not DataSource.DataSet.Eof 부분에서 for 루프가 끝나면 그 밑에 배열로
저장되어야 되는데 디버깅한 결과 바로 Not DataSource.DataSet.Eof 부분을
검사합니다..

그리고 마지막 부분에 '저장 후 바로 열기' 부분도 안됩니다. 아마 저장 자체가
안되어서 열기가 안되는 듯합니다.

델파이에서 아직 갈 길이 먼듯합니다. 도와 주십시요.

procedure TExcelOptionDialog.bbtnExecClick(Sender: TObject);
var
  XL, XArr, XTitle: Variant;
  i, j, k, v_count: Integer;
begin

  if sdDialog.Execute then
  begin
  v_count := FdxGrid.DataSource.DataSet.FieldCount;
  with FdxGrid do begin
     //타이틀 처리변수
     XTitle := VarArrayCreate([1, v_count ], VarVariant);
     //데이타 처리변수
     XArr := VarArrayCreate([1, v_count ], VarVariant);

     try
        //엑셀을 실행
        XL := CreateOLEObject('NExcel.Application');
     except
        MessageDlg('Excel이 설치되어 있지 않습니다.',
                    MtWarning, [mbok], 0);
        Exit;
     end;

     XL.WorkBooks.Add; //새로운 페이지 생성
//     XL.Visible := True;

     i := 1;
     k := 1;

     while i < v_count do begin
        XTitle[i] := Columns[i-1].ClassName;
        Inc(i);
     end;
     //타이틀처리
     XL.Range['A1', CHR(64 + v_count ) + '1'].Value := XTitle;

     //SelectNext;
//     Next;

     while Not DataSource.DataSet.Eof do begin        <-이부분
        for j:=1 to v_count do
           if j = 12 then break
           else if Columns[j-1].Field.DataType = ftString then
                if Columns [j-1].Field.Value = null then
                    XArr[j] := '''' + ''
                else
                    XArr[j] := '''' + Columns[j-1].Field.Value
           else
                    XArr[j] := Columns[j-1].Field.Value
        end;                                 <-끝나면 밑에 값을  넣어야 하는데
                                                   다시 윗부분을 while부분 검사
        //셀에 값을 넣는다.
        XL.Range['A' + IntToStr(k+1),
                CHR(64 + v_count) + IntToStr(k+1)].Value := XArr;
        Next;
        Inc(k);


//셀 크기 조정
         XL.Range['A1', CHR(64 + v_count) + IntToStr(k)].Select;
//       XL.Selection.Columns.AutoFit;
         XL.Range['A1', 'A1'].Select;
         SelectFirst;
    end;

    if rgOptions.ItemIndex = 1 then  // 저장후 실행옵션이면
      ShellExecute(0, 'OPEN', PChar(sdDialog.FileName),   <-이부분
        nil, nil, SW_SHOW);   // Excel 열기
  end;
  Close;
end;
0  COMMENTS