Delphi i Excel

0

Mam takie pytanie : Czy da się w delphi otworzyć pliki *.xls ?? Jeśli tak to w jaki sposób

0

Jasne, ze sie da, jak zreszta kazdy inny plik.

//DOPISANE:
AssignFile()
Reset() i plik otwarty

0

Jasne, ze sie da, jak zreszta kazdy inny plik.

Jeśli tak to w jaki sposób

0

jasne AssignFile potem Reset i Read a na końcu CloseFile i masz odczytany plik XLS :D tylko teraz trzeba to tylko odpowiednio w programie ustawić żeby dobrze to poustawiał na formie. spytaj sie najlepiej tych z microsoftu jak to oni tam zrobili, najlepiej poproś o kody źródłowe.

a tak na serio, to nie mam pojęcia jak. na pewno nie odczytasz tak jak być powinno tj. z wykresami, grafikami, uzupełnionymi formułami (chociaż) ,ale podstawowe komórki tak jak jest to np w NC z '94 roku to nie powinno być zbyt trudne. do tego na pewno gdzieś jest jakiś komponent.

0

http://sc.openoffice.org/excelfileformat.pdf

google (prawie) z rana jak smietana.

(ŁF chyba kiedys rzucal podobnym linkiem i bylo w htmlu.)

0

3maj. I niech nikt więcej o to nie pyta. Niech ktoś to umieści w FAQ, czy gdzieś.

Kontrolowanie Excela

uses 
  ComObj; 

var 
  ExcelApp: OleVariant; 

implementation 


procedure TForm1.Button1Click(Sender: TObject); 
const 
  // SheetType 
  xlChart = -4109; 
  xlWorksheet = -4167; 
  // WBATemplate 
  xlWBATWorksheet = -4167; 
  xlWBATChart = -4109; 
  // Page Setup 
  xlPortrait = 1; 
  xlLandscape = 2; 
  xlPaperA4 = 9; 
  // Format Cells 
  xlBottom = -4107; 
  xlLeft = -4131; 
  xlRight = -4152; 
  xlTop = -4160; 
  // Text Alignment 
  xlHAlignCenter = -4108; 
  xlVAlignCenter = -4108; 
  // Cell Borders 
  xlThick = 4; 
  xlThin = 2; 
var 
  ColumnRange: OleVariant; 

  // Function to get the number of Rows in a Certain column 

  function GetLastLine(AColumn: Integer): Integer; 
  const 
    xlUp = 3; 
  begin 
    Result := ExcelApp.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row; 
  end; 

begin 
  { Start Excel } 

  // By using GetActiveOleObject, you use an instance of Word that's already running, 
  // if there is one. 
  try 
    ExcelApp := GetActiveOleObject('Excel.Application'); 
  except 
    try 
      // If no instance of Word is running, try to Create a new Excel Object 
      ExcelApp := CreateOleObject('Excel.Application'); 
    except 
      ShowMessage('Cannot start Excel/Excel not installed ?'); 
      Exit; 
    end; 
  end; 

  // Dodanie nowego arkusza
  ExcelApp.Workbooks.Add(xlWBatWorkSheet); 

  // Otwarcie arkusza
  ExcelApp.Workbooks.Open('c:\YourFileName.xls'); 


  // Zmiana nazwy aktywnej zakładki
  ExcelApp.ActiveSheet.Name := 'This is Sheet 1'; 

  // Zmiana nazwy
  ExcelApp.Workbooks[1].WorkSheets[1].Name := 'This is Sheet 1'; 

  // Wpisywanie tekstu w niektóre komórki
  ExcelApp.Cells[1, 1].Value := 'SwissDelphiCenter.ch'; 
  ExcelApp.Cells[2, 1].Value := 'http://www.swissdelphicenter.ch'; 
  ExcelApp.Cells[3, 1].Value := FormatDateTime('dd-mmm-yyyy', Now); 

  // Setting a row of data with one call 
  ExcelApp.Range['A2', 'D2'].Value := VarArrayOf([1, 10, 100, 1000]); 

  // Wpisywanie formuły
  ExcelApp.Range['A11', 'A11'].Formula := '=Sum(A1:A10)'; 


  // Zmiana wyrównania tekstu w komórce
  ExcelApp.Cells[2, 1].HorizontalAlignment := xlright; 


  // Zmiana szerokości kolumny
  ColumnRange := ExcelApp.Workbooks[1].WorkSheets[1].Columns; 
  ColumnRange.Columns[1].ColumnWidth := 20; 
  ColumnRange.Columns[2].ColumnWidth := 40; 


  // Zmiana wysokości rzędu
  ExcelApp.Rows[1].RowHeight := 15.75; 


  // Merge cells, Zellen verbinden: 
  ExcelApp.Range['B3:D3'].Mergecells := True; 


  // Apply borders to cells, Zellen umrahmen: 
  ExcelApp.Range['A14:M14'].Borders.Weight := xlThick; // Think line/ Dicke Linie 
  ExcelApp.Range['A14:M14'].Borders.Weight := xlThin;  // Thin line Dünne Linie 


  // Ustawianie stylu czcionki w komórce
  ExcelApp.Range['B16:M26'].Font.Bold := True; 


  // ustawianie wielkości czcionki w komórce
  ExcelApp.Range['B16:M26'].Font.Size := 12;
 

  //right-aligned Text, rechtsbündige Textausrichtung 
  ExcelApp.Cells[9, 6].HorizontalAlignment := xlright; 

  // horizontal-aligned text, horizontale Zentrierung 
  ExcelApp.Range['B14:M26'].HorizontalAlignment := xlHAlignCenter; 

  // left-aligned Text, vertikale Zentrierung 
  ExcelApp.Range['B14:M26'].VerticallyAlignment := xlVAlignCenter; 


  { Page Setup } 

  ExcelApp.ActiveSheet.PageSetup.Orientation := xlLandscape; 

  // Left, Right Margin (Seitenränder) 
  ExcelApp.ActiveSheet.PageSetup.LeftMargin  := 35; 
  ExcelApp.ActiveSheet.PageSetup.RightMargin := -15; 

  // Set Footer Margin 
  ExcelApp.ActiveSheet.PageSetup.FooterMargin := ExcelApp.InchesToPoints(0); 

  // Fit to X page(s) wide by Y tall 
  ExcelApp.ActiveSheet.PageSetup.FitToPagesWide := 1;  // Y 
  ExcelApp.ActiveSheet.PageSetup.FitToPagesTall := 3; // Y 

  // Zoom 
  ExcelApp.ActiveSheet.PageSetup.Zoom := 95; 

  // Set Paper Size: 
  ExcelApp.PageSetup.PaperSize := xlPaperA4; 

  // Show/Hide Gridlines: 
  ExcelApp.ActiveWindow.DisplayGridlines := False; 

  // Set Black & White 
  ExcelApp.ActiveSheet.PageSetup.BlackAndWhite := False; 

  // footers 
  ExcelApp.ActiveSheet.PageSetup.RightFooter := 'Right Footer / Rechte Fußzeile'; 
  ExcelApp.ActiveSheet.PageSetup.LeftFooter  := 'Left Footer / Linke Fußzeile'; 

  // Show Excel Version: 
  ShowMessage(Format('Excel Version %s: ', [ExcelApp.Version])); 

  // Show Excel: 
  ExcelApp.Visible := True; 

  // Save the Workbook 
  ExcelApp.SaveAs('c:\filename.xls'); 

  // Save the active Workbook: 
  ExcelApp.ActiveWorkBook.SaveAs('c:\filename.xls'); 

end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  // Quit Excel 
  if not VarIsEmpty(ExcelApp) then 
  begin 
    ExcelApp.DisplayAlerts := False;  // Discard unsaved files.... 
    ExcelApp.Quit; 
  end; 
end; 
0

Juhas i roSZi [browar] dzięki :D

0

jak do Tlistbox wczytac jedna wybrana kolumne z excela, nie uzywajac petli ?

matras.Items:=tstrings(Excelsheet.Range['B16']); - cos mi nie wychodzi z tym...

0

ExcelApp.Range[Char(96 + 1) + IntToStr(65536)].end[xlUp].Rows.Row;

To działa ale tylko dla kolumn z przedziuału A-Z, Przy próbie odczytu kolumny np AA wywala błąd.

0

Wydaje mi się że w Delphi 7 E powinien być komponent obsługujący pliki exela, ale mogę się mylić...

1 użytkowników online, w tym zalogowanych: 0, gości: 1