// 처음 Users에 Comobj추가 했음.
// 에러사항 : 'OLE error 800A03EC'
// 다른 방법이 없는지 알려주세용~~ 부탁드려여 ^^
procedure TFPA_7201.btnExcelClick(Sender: TObject);
Var
Loop1I, Li_Field1, Li_Field2, Li_Cnt1, Li_Cnt2, Li_Cnt3 : Integer;
XArr1, XArr2, Sheet : Variant;
begin
XArr1 := VarArrayCreate([1, QryDefault.FieldCount], VarVariant);
// XArr2 := VarArrayCreate([1000, 14], VarVariant);
Try
Excel := CreateOLEObject('Excel.Application');
Except
ShowMessage('엑셀이 설치되어있지 않습니다.');
Exit;
End;
If (TabSheet1.Visible) And (QryDefault.IsEmpty) Then
Begin
ShowMessage('엑셀로 변환할 자료가 없습니다.');
Exit;
End;
If (TabSheet2.Visible) And (QryDefault2.IsEmpty) Then
Begin
ShowMessage('엑셀로 변환할 자료가 없습니다.');
Exit;
End;
Excel.WorkBooks.Add;
Excel.visible := true;
Excel.Cells.Select;
Excel.Cells.EntireColumn.Font.Name := '돋움체';
Excel.Range['B1:E1'].Select;
Excel.ActiveCell.Font.Size := 16;
Excel.ActiveCell.Font.Name := '돋움체';
Excel.ActiveCell.Font.FontStyle := '굵게';
Excel.ActiveCell.FormulaR1C1 := '가입자리스트';
Li_Cnt1 := 0;
// Note - 설치매출/수신료매출
If TabSheet1.Visible Then
Begin
For Li_Field1 := 0 To 17 Do
Begin
If DbGrid1.Columns[Li_Field1].Visible Then
Begin
Excel.Range[Chr(65+Li_Cnt1) + '3', Chr(65+Li_Cnt1) + '3'].Value := DbGrid1.Columns.Items[Li_Field1].Title.Caption;
Li_Cnt1 := Li_Cnt1 + 1;
End;
End;
Li_Cnt2 := 0;
QryDefault.First;
QryDefault.DisableControls;
While Not QryDefault.Eof Do
Begin
Li_Cnt2 := 0;
For Li_Field1 := 0 To QryDefault.FieldCount Do
Begin
If DbGrid1.Columns[Li_Field1].Visible Then
Begin
XArr1[Li_Cnt2+1] := QryDefault.Fields[Li_Cnt2].Value;
// Note - 에러가 발생하는 부분
Excel.Range['A4', Chr(64+QryDefault.FieldCount) + Chr(Li_Cnt3 + 4)].Value := '''' + QryDefault.Fields[Li_Cnt2].Value;
// Excel.Cells[Li_Cnt3+4, Li_Cnt2+1] := QryDefault.Fields[Li_Cnt2].Value;
// Excel.Cells[Li_Cnt3+4, Li_Cnt2+1].Style.NumberFormatLocal := '@';
4)].Value := '''' + QryDefault.Fields[Li_Cnt2].Value;
Inc(Li_Cnt2);
End;
End;
QryDefault.Next;
Inc(Li_Cnt3);
End;
End
Else
Li_Cnt1 := 1;
// Note - 해약/입금
Begin
For Li_Field1 := 0 To 14 Do
Begin
If DbGrid2.Columns[Li_Field1].Visible Then
Begin
Excel.Range[Chr(64+Li_Cnt1) + '3', Chr(64+Li_Cnt1) + '3'].Value := DbGrid2.Columns.Items[Li_Field1].Title.Caption;
Li_Cnt1 := Li_Cnt1 + 1;
End;
End;
End;
qryDefault.First;
qryDefault.EnableControls;
Excel.Cells.Select;
Excel.Cells.EntireColumn.AutoFit;
Excel.Range['A1'].Select;
제가 생각하기에는 값을 넘겨주는 형태가 잘못된것 같네염...
A4부터 유동인값 까지 값을 넘겨주시려면 그에 맞는 길이의 배열이 있어야 합니다..
배열의 형태로 넘겨줘야한다는 얘기지요..
맞는지는 모르겠지만.. 만약에 밑의 문장에서
Chr(64+QryDefault.FieldCount) + Chr(Li_Cnt3 + 4) <- 이곳에 들오는 값이
'A4'가 아니라면 에러가 날것 같거든요..
한행에 값을 넣어주시는게 목적이라면 for문에서 배열에집어넣어주시고요
(앗 배열 있넹..ㅡㅡ;)
for문(fieldcount)이 끝난후에 행에다가 넣어주시지요. 답이 됐음 하네요..
즐델하세요~~
Excel.Range['A4', Chr(64+QryDefault.FieldCount) + Chr(Li_Cnt3 + 4)].Value := '''' + QryDefault.Fields[Li_Cnt2].Value;