我看了一些中国式报表,可以在设计报表的时候拉动网格行或列,来改变网格的大小
其中有一种可以智能的改变字体的大小,来适应网格的大小,达到字体显示最优化。
请问是否有这样的报表控件,
或者根据算法写代码控制
解决高分相送,绝不食言!

解决方案 »

  1.   

    动态创建一个memo与那个单元格一样大小,然后把text赋进去,再导出来
      

  2.   

    ChinaExcel报表插件-DELPHI报表设计
      

  3.   

    reportmachine可以自动折行,不知能否满足你的要求
      

  4.   

    听说Grid++Report可以,不知道各位用过没有?
      

  5.   

    xinshiji(自由我有)
    这种报表有我有那样的功能吗?
      

  6.   

    to jslp(liupeng)
    现在关键的问题是能处理每个网格
    字体可以用矢量字体
    只要哪种网格控件能控制每个单元格,并且能打印就可以了
    其他的代码控制
      

  7.   

    用DBGridEh中的自带的打印可以设置字体大小,
    不知是不是你想要的!
    请参考!
      

  8.   

    excel有这样的功能
    请问有没有delphi用OLE处理EXCEL的详细例子
    网上搜到的代码编译都不能通过
    各位救急,谢谢!
      

  9.   

    请参考:将字符串栅格变量Content的内容发送到Excel的程序代码如下:
    Procedure TForm1.PrintBtnClick(Sender: TObject);
    Var i, j, IntChar : integer;
    Begin
    //生成Excel标准列号并存储在字符串列表变量 ColumnName中;
    ColumnName :=TStringList.Create;
    IntChar :=Ord('A');
    for i :=0 to (MAXCOL div 2)-1 do
    ColumnName.Add(Chr(IntChar+i));
    IntChar :=ord('A');
    for i :=0 to (MAXCOL div 2)-1 do
    ColumnName.Add('A'+Chr(IntChar+i));
    try
    //获得Excel的Application对象;
    ExcelApp :=CreateOleObject('Excel.application');
    except
    ShowMessage('Can not start Excel. ');
    exit;
    end;
    //增加新的工作簿,并设置当前的工作簿;
    ExcelApp.Workbooks.Add;
    ExcelApp.Workbooks.Item[1].Activate;
    //插入Excel表格的标题;
    ExcelApp.Activesheet.Cells(1,1) := TableCaption.Caption;
    //用Content 中的值填充Excel表格;
    for i :=1 to Content.RowCount do
    for j :=1 to Content.ColCount do
    ExcelApp.Activesheet.Cells(3+i,j):=Content.Cells[j-1,i-1];
    //使Excel表格的标题跨列居中;
    ExcelApp.Activesheet.Range['A1',ColumnName.Strings[Content.ColCount -1]+'1'].Select;
    ExcelApp.Selection.HorizontalAlignment:= xlCenter;
    ExcelApp.Selection.VerticalAlignment:= xlBottom;
    ExcelApp.Selection.WrapText:= False;
    ExcelApp.Selection.Orientation:= 0;
    ExcelApp.Selection.AddIndent:= False;
    ExcelApp.Selection.ShrinkToFit:= False;
    ExcelApp.Selection.MergeCells:= True;
    //使Excel 应用程序可见;
    ExcelApp.Visible:=true;
    end;
      

  10.   

    请参考:
    方法如下 :
    1 、创建一个普通 Application 。 
    2 、在 Form 中分别放入 ExcelApplication, ExcelWorkbook 和 ExcelWorksheet 。 
    3 、对 Excel 的一些操作 ,具体方法如下 :
    【打开 Excel97 】      ExcelApplication1.Connect;     ExcelApplication1.Visible[0]:=True;【增加一个 Workbook 】      ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));【添加一个 Worksheet 】    var    Temp_Worksheet: _WorkSheet;   begin     Try       Temp_Worksheet:=ExcelWorkbook1.       WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;//( 注意 )       ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);     Except       ShowMessage('Failure');     End;   end;【关闭 Excel 】      ExcelApplication1.Quit;     ExcelWorksheet1.Disconnect;     ExcelWorkbook1.Disconnect;     ExcelApplication1.Disconnect;【选择当前 Workbook 的某一 Worksheet 】    procedure TForm1.ComboBox1DropDown(Sender: TObject);   var     i: Integer;   begin     ComboBox1.Clear;     For i:=1 to ExcelWorkbook1.Worksheets.Count do       ComboBox1.Items.Add((ExcelWorkbook1.Worksheets.Item[i] as _WorkSheet).Name);   end;
       procedure TForm1.ComboBox1Change(Sender: TObject);   begin     ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets.Item [ComboBox1.ItemIndex+1] as _WorkSheet);     ExcelWorkSheet1.Activate;   end;
    【选择某一 Workbook 】    procedure TForm1.ComboBox2DropDown(Sender: TObject);   var     i: Integer;   begin     ComboBox2.Clear;     if ExcelApplication1.Workbooks.Count >0 then     For i:=1 to ExcelApplication1.Workbooks.Count do     Combobox2.Items.Add(ExcelApplication1.Workbooks.Item[i].Name);   end;
       procedure TForm1.ComboBox2Change(Sender: TObject);   begin     ExcelWorkSheet1.Disconnect;     ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[Combobox2.ItemIndex+1]);     ExcelWorkBook1.Activate;     ExcelWorksheet1.ConnectTo(ExcelWorkBook1.ActiveSheet as _WorkSheet);     ExcelWorkSheet1.Activate;   end;
    【对某一单元格进行赋值及取值】    procedure TForm1.Button5Click(Sender: TObject);   begin     ExcelWorksheet1.Cells.Item[SpinEdit2.Value,SpinEdit1.Value]:=Edit1.Text;   end;
       procedure TForm1.Button6Click(Sender: TObject);   begin     Edit1.Text:=ExcelWorksheet1.Cells.Item[SpinEdit2.Value,SpinEdit1.Value];   end;
    【选择某一区域】    ExcelWorkSheet1.Range['A1','C1'].Select;
    【打开一个 Excel 文件】    if OpenDialog1.Execute then   Begin       ExcelWorkBook1.ConnectTo(          ExcelApplication1.Workbooks.Open(             OpenDialog1.FileName,EmptyParam,EmptyParam,EmptyParam,             EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,             EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));       ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Activesheet as _Worksheet);   End;【存入一个 Excel 文件】    procedure TForm1.button6Click(Sender: TObject);   var     i,row,column:integer;   begin     Try       ExcelApplication1.Connect;     Except       MessageDlg('Excel may not be installed',mtError, [mbOk], 0);       Abort;     End;     ExcelApplication1.Visible[0]:=True;     ExcelApplication1.Caption:='Excel Application';     ExcelApplication1.Workbooks.Add(Null,0);     ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);     ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);     Table1.Open;     row:=1;     While Not(Table1.Eof) do     begin       column:=1;       for i:=1 to Table1.FieldCount do       begin         ExcelWorksheet1.Cells.Item[row,column]: =Table1.fields[i-1].AsString;         column:=column+1;       end;       Table1.Next;       row:=row+1;     end;   End;
    【打印预览一个 Excel 文件】    procedure TForm1.Button7Click(Sender: TObject);   begin     ExcelWorksheet1.PrintPreview;   end;
    【打印一个 Excel 文件】    procedure TForm1.Button8Click(Sender: TObject);   begin     ExcelWorksheet1.PrintOut;   end;
      

  11.   

    首先非常感谢楼上的这位
    你转载的内容我已经看过
    不过不是我想要的功能
    我的要求是:
    将Excel嵌入到OleContainer中
    并隐藏其工具条
    使得其外观看上去跟普通的网格控件一样
    并且网格内容只读
    各位,江湖救急啊,分多的是!
      

  12.   

    使得其外观看上去跟普通的网格控件一样
    并且网格内容只读****************************DBGridEh就可以实现比较复杂的表格功能,或者用其它的一些Grid控件。为什么非要用Excel呢?其实用OLEContainer嵌入对象效率非常低,是不得已而为之的做法
      

  13.   

    好像DBGridEh里面的字体也不能根据根据网格的大小,动态的改变字体大小
      

  14.   

    DBGridEh就可以实现比较复杂的表格功能,或者用其它的一些Grid控件。为什么非要用Excel呢?其实用OLEContainer嵌入对象效率非常低,是不得已而为之的做法
    ----------------
    就是不得已而为之啊