07. november 2002 - 16:31Der er
10 kommentarer og 1 løsning
ListView til Excel
Hey! Jeg leder efter en funktion/et komponent eller noget helt tredje, der kan eksportere cellerne i et ListView til en excel-fil! Kolonnerne skal også eksporteres! Jeg ser meget gerne kode-eksempler!
Du kan bruge de COM servere der er med til delphi, de er lidt tricke at få til at køre men det kan godt lade sig gøre. Du kan også prøve at spørge Jens Borrisholt han har en Classe der kan exportere en Table, det er godt nok ikke en ListView men det kan da være der er noget du kan bruge.
Jeg er en travl mand og håbede derfor på, at jeg kunne få noget kode med for 200 points. Det ville være helt fint, hvis du kunne spække et eks. med COM-serverne sammen! :o) /anykey
Well.. det haster ikke mere end som så - jeg har desværre bare ikke så meget tid til selv at arbejde på det. Jeg tror, at jeg lader spørgsmålet køre lidt og ser, om der ikke skulle komme lidt flere indlæg... Men tak for hjælpen :)
Følgende "Snip" er fra et system vi bruger til at modtage vare/prisopdateringer fra vores Leverandører. Den indlæser den (Excel) fil som leverandøren sender og de "linier" den ikke kan fortolke skrives til et "fejl-Excel-fil":
Function LogicalEOF: Boolean; var I: Integer; Value: String; TmpValue: String; begin TmpValue := ''; for I := 1 to 16 do begin Value := XlsDataSheet.Cells[Row,I].Value; TmpValue := TmpValue + Value; end; if (StrTrimCharRight(StrTrimCharLeft(TmpValue,' '),' ') = '') then Inc(CountEOF) else CountEOF := 0; Result := (CountEOF > 10); end;
begin //--- ErrorFileCreated := False; ErrorFileName := ImportOptions.GenerateErrorFileName(Now, 'XLS'); ImportOptions.ErrorFileName := ''; ErrorLineNo := 1; //--- XlsApp := CreateOleObject('Excel.Application'); try XlsDataWbk := XlsApp.WorkBooks.Open(ImportOptions.ImportFile1); XlsDataSheet := XlsApp.WorkBooks[1].WorkSheets[1]; try Row := 1; CountEOF := 0; while not LogicalEOF do begin ErrorLine := False; Value := XlsDataSheet.Cells[Row,1].Value; TestLine := Value; FieldRecordType := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,2].Value; TestLine := TestLine + Value; FieldEAN := StrTrimCharRight(StrTrimCharLeft(StrTrimCharLeft(Value,'0'),' '),' '); Value := XlsDataSheet.Cells[Row,3].Value; TestLine := TestLine + Value; FieldVareTekst := StrTrimCharRight(StrTrimCharLeft(Value,' '),' '); Value := XlsDataSheet.Cells[Row,4].Value; TestLine := TestLine + Value; FieldKostPris := StrToFloatSafe(Value) / 100.0; Value := XlsDataSheet.Cells[Row,5].Value; TestLine := TestLine + Value; FieldKolli := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,6].Value; TestLine := TestLine + Value; FieldSalgsPris := StrToFloatSafe(Value) / 100.0; if ImportOptions.UseRounding then begin FieldSalgsPris := ImportOptions.PriceRoundSuppliers.RoundPrice(ImportOptions.SupplierId, FieldSalgsPris); end; Value := XlsDataSheet.Cells[Row,7].Value; TestLine := TestLine + Value; FieldAnbrudsPris := StrToFloatSafe(Value) / 100.0; Value := XlsDataSheet.Cells[Row,8].Value; TestLine := TestLine + Value; FieldVaregruppeIsenkram := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,9].Value; TestLine := TestLine + Value; FieldVaregruppeEL := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,10].Value; TestLine := TestLine + Value; FieldLevVareNr := StrTrimCharRight(StrTrimCharLeft(Value,' '),' '); Value := XlsDataSheet.Cells[Row,11].Value; TestLine := TestLine + Value; FieldHoejde := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,12].Value; TestLine := TestLine + Value; FieldBredde := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,13].Value; TestLine := TestLine + Value; FieldDybde := StrToIntSafe(Value); Value := XlsDataSheet.Cells[Row,14].Value; TestLine := TestLine + Value; FieldKaedeOpdatPSEL := AnsiUpperCase(Value); Value := XlsDataSheet.Cells[Row,15].Value; TestLine := TestLine + Value; FieldKaedeOpdatKopKande := AnsiUpperCase(Value); Value := XlsDataSheet.Cells[Row,16].Value; TestLine := TestLine + Value; FieldKaedeOpdatAktive := AnsiUpperCase(Value); TestLine := StrRemoveChars(TestLine, [' ']); if Length(TestLine) > 0 then begin if HasMandatoryFields(FieldRecordType, FieldEAN, FieldVareTekst, FieldKostPris, FieldKolli, FieldSalgsPris, FieldAnbrudsPris, FieldVaregruppeIsenkram, FieldVaregruppeEL, FieldLevVareNr, FieldHoejde, FieldBredde, FieldDybde, FieldKaedeOpdatPSEL, FieldKaedeOpdatKopKande, FieldKaedeOpdatAktive) then begin TempExportRecord := ImportOptions.ImpFilter.TempExportBuffer.FindEAN(FieldEAN); if Assigned(TempExportRecord) then begin ImportOptions.MemoProgress.Lines.Add('Gen-Indlæser oplysninger for: '+FieldEAN); end else begin TempExportRecord := ImportOptions.ImpFilter.TempExportBuffer.AddEAN(FieldEAN); ImportOptions.MemoProgress.Lines.Add('Indlæser oplysninger for: '+FieldEAN); end; with TempExportRecord do begin Recordtype := FieldRecordType; Varetekst := FieldVareTekst; Kostpris := FieldKostPris; Kolli := FieldKolli; Salgspris := FieldSalgsPris; if ImportOptions.UseRounding then begin SalgsPris := ImportOptions.PriceRoundSuppliers.RoundPrice(ImportOptions.SupplierId, SalgsPris); end; Anbrudspris := FieldAnbrudsPris; VaregruppeIsenkram := FieldVaregruppeIsenkram; VaregruppeEL := FieldVaregruppeEL; LevVareNr := FieldLevVareNr; Hoejde := FieldHoejde; Bredde := FieldBredde; Dybde := FieldDybde; KaedeOpdatPSEL := (AnsiUpperCase(FieldKaedeOpdatPSEL) = 'J'); KaedeOpdatKopKande := (AnsiUpperCase(FieldKaedeOpdatKopKande) = 'J'); KaedeOpdatAktive := (AnsiUpperCase(FieldKaedeOpdatAktive) = 'J'); if ImportOptions.UseExcludeArticleGroups then begin qArtInGroup := TQuery.Create(Nil); qArtInGroup.DatabaseName := DataModuleSBoss2Paradox.dbSBoss2Paradox.DatabaseName; qArtInGroup.SQL.Text := 'SELECT ARTICLES.OrderGroup,' + #13#10 + 'ArticlesPLUNumbers.PLU' + #13#10 + 'FROM ArticlesPLUNumbers' + #13#10 + 'INNER JOIN ARTICLES ON (ArticlesPLUNumbers.MasterId = ARTICLES.ArticleId)' + #13#10 + 'WHERE ArticlesPLUNumbers.PLU = ' + Chr(39) + StrStripNonNumberChars(FieldEAN) + Chr(39); try qArtInGroup.Open; if qArtInGroup.RecordCount > 0 then begin OrderGroup := TOrderGroup(ImpFixSettings.OrderGroups.LocateOrderGroupID(qArtInGroup.FieldByName('OrderGroup').AsInteger)); if Assigned(OrderGroup) then begin if OrderGroup.Checked then ExcludeCode := 1; end; end; finally qArtInGroup.Close; qArtInGroup.Free; end; end; end; end else ErrorLine := True; end; if ErrorLine then begin if not(ErrorFileCreated) then begin ErrorFileCreated := True; XlsErrorWbk := XlsApp.WorkBooks.Add; XlsErrorSheet := XlsApp.WorkBooks[2].WorkSheets[1]; ImportOptions.ErrorFileName := ErrorFileName; end; for Col := 1 to 16 do begin Value := XlsDataSheet.Cells[Row,Col].Value; XlsErrorSheet.Cells[ErrorLineNo,Col].Value := Value; { XlsErrorSheet.Cells[ErrorLineNo,Col].Font.Bold := XlsDataSheet.Cells[Row,Col].Font.Bold; XlsErrorSheet.Cells[ErrorLineNo,Col].Font.Size := XlsDataSheet.Cells[Row,Col].Font.Size; XlsErrorSheet.Cells[ErrorLineNo,Col].Font.Color := XlsDataSheet.Cells[Row,Col].Font.Color; XlsErrorSheet.Cells[ErrorLineNo,Col].Interior.Color := XlsDataSheet.Cells[Row,Col].Interior.Color; XlsErrorSheet.Cells[ErrorLineNo,Col].NumberFormat := XlsDataSheet.Cells[Row,Col].NumberFormat; } end; inc(ErrorLineNo); end; Inc(Row); end; finally if ErrorFileCreated then begin XlsErrorWbk.SaveAs(ErrorFileName,,,,,,,,); ImportOptions.MemoProgress.Lines.Add('***** FEJL***** : '+ErrorFileName); end; XlsApp.WorkBooks.Close; end; finally XlsApp.Application.Quit; end; end; </SNIP>
anykey >> Nøh og du bad aldrig om det kode jeg havde ...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.