stringgrid do excela w trybie tekstowym

0

Witam.
Jak przenosząc z stringgrid do excela wymusić na excelu nadanie komórkom tryb tekstowy, a nie automatycznie rozpoznawał typ komórki. Chodzi mi głownie żeby wyrażenie typu "3/2007" excel rozpoznawał jako tekst a nie jako datę.
Kod wygląda następująco:


procedure TForm1.doexcel(var tab:tarray;var tabw:TStringGrid;var button:Tbutton);
 var
 Excel:Variant;
 i,j:integer;
 begin
  try
 Button.Visible:=False;
  Excel:=CreateOleObject('Excel.Application');  // Otwarcie nowego Excela
  Excel.WorkBooks.Add;                                 // Stworzenie skoroszytu

  for j:=1 to   lickolspr do
  Begin

    for i:=1 to ogr-1 do if (tab[2,i]<>'')or(tab[1,i]<>'')then
    begin

    Excel.Cells[i,j]:=tab[j,i];

    end;
  end;
   Excel.Visible := True;


//Excel.Cells[1,1].Value:='5as ';                    // Zapis danej do komórki Excela
{Excel.ActiveWorkbook.SaveAs('roz.xls');             // Zapis do pliku
Excel.Quit; }
  finally
   Button.Visible:=true;
 end;
end;
0

Najprościej poprzedzić to apostrofem. I jeżeli mogę. Twoje rozwiązanie jest wolne. Poniżej masz procedurę eksportu grida do excela.

procedure ExportGridToExcel(ASG :TStringGrid);
var
  xlApp  :TExcelApplication;
  xlWB   :TExcelWorkBook;
  xlWS   :TExcelWorksheet;
  TempWS :_WorkSheet;
  lcid   :Integer;
  w, k   :Word;
  i, j   :Word;
  VarArr :OleVariant;
  v      :Double;
begin
  xlApp := TExcelApplication.Create(nil);
  xlWS := TExcelWorksheet.Create(nil);
  xlWB := TExcelWorkbook.Create(nil);
  lcid := GetUserDefaultLCID();
  try
    try
      xlApp.Connect();
      xlWB.ConnectTo(xlApp.Workbooks.Add(EmptyParam, 0));
      TempWS := xlWB.Worksheets.Add(
        EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0) as _WorkSheet;
      xlWS.ConnectTo(TempWS);
      xlApp.Visible[lcid] := true;
      xlApp.ScreenUpdating[lcid] := true;
      with ASG do
      begin
        k := ColCount;
        w := RowCount;

        VarArr := VarArrayCreate([1, w, 1, k], varVariant);
        for i := 1 to w do
          for j := 1 to k do
            begin
              if TryStrToFloat(Cells[j - 1, i - 1], v) then
                 VarArr[i, j] := v else
                 VarArr[i, j] := Cells[j - 1, i - 1];
            end;
        with xlWS.Range[xlWS.Cells.Item[1,1], xlWS.Cells.Item[w-1, k]] do
        begin
          Value2 := VarArr;
          // obramowanie
          Borders[xlEdgeLeft].LineStyle := xlContinuous;
          Borders[xlEdgeTop].LineStyle := xlContinuous;
          Borders[xlEdgeBottom].LineStyle := xlContinuous;
          Borders[xlEdgeRight].LineStyle := xlContinuous;
          Borders[xlInsideVertical].LineStyle := xlContinuous;
          Borders[xlInsideHorizontal].LineStyle := xlContinuous;
        end;
      end;
    except
      ShowMessage('Unable to connect MS Excel. Please try again');
    end;
  finally
    xlApp.Disconnect();
  end;
  xlApp.Free();
  xlWB.Free();
  xlWS.Free();
end;

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