unit Unit1;

interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Tabs, Cell2,
{$ifdef ver140}
Variants,
{$endif}
XLSUtils2, XLSReadWriteII2; type TForm8 = class(TForm) Label1: TLabel; edFilename: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; dlgOpen: TOpenDialog; Button4: TButton; Grid: TDrawGrid; TabSet: TTabSet; lblCell: TLabel; edCell: TEdit; XLS: TXLSReadWriteII2; procedure Button1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure TabSetChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); procedure GridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); procedure GridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); procedure GridSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); procedure GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); private EditCol,EditRow: integer; EditText: string; function ColToText(Col: integer): string; procedure SetCellValue(Col,Row: integer); public { Public declarations } end; var Form8: TForm8; implementation {$R *.dfm} function TForm8.ColToText(Col: integer): string; var S: string; begin if (Col div 26) > 0 then S := Char(Ord('A') + (Col div 26) - 1) else S := ''; Result := S + Char(Ord('A') + (Col mod 26)); end; procedure TForm8.Button1Click(Sender: TObject); begin dlgOpen.FileName := edFilename.Text; if dlgOpen.Execute then edFilename.Text := dlgOpen.FileName; end; procedure TForm8.Button4Click(Sender: TObject); begin Close; end; procedure TForm8.Button2Click(Sender: TObject); var i: integer; begin XLS.Sheet[0].PrintSettings.FitWidth := 2; XLS.Filename := edFilename.Text; XLS.Read; TabSet.Tabs.Clear; for i := 0 to XLS.Sheets.Count - 1 do TabSet.Tabs.Add(XLS.Sheets[i].Name); TabSet.TabIndex := 0; Grid.Invalidate; end; procedure TForm8.GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var S: string; begin if (ACol > 0) and (ARow > 0) then begin S := XLS.Sheets[TabSet.TabIndex].AsFmtString[ACol - 1,ARow - 1]; if S <> '' then Grid.Canvas.TextRect(Rect,Rect.Left + 2,Rect.Top + 2,S); end else if (ACol <> 0) then begin S := ColToText(ACol - 1); Grid.Canvas.TextRect(Rect,Rect.Left + (Rect.Right - Rect.Left) div 2 - (Grid.Canvas.TextWidth(S) div 2),Rect.Top + 2,S); end else if (ARow <> 0) then Grid.Canvas.TextRect(Rect,Rect.Left + 2,Rect.Top + 2,IntToStr(ARow)); end; procedure TForm8.TabSetChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); begin Grid.Invalidate; end; procedure TForm8.GridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); begin EditCol := ACol; EditRow := ARow; case XLS.Sheets[TabSet.TabIndex].CellType[ACol - 1,ARow - 1] of ctNumberFormula, ctStringFormula, ctBooleanFormula: Value := '=' + XLS.Sheets[TabSet.TabIndex].AsFormula[ACol - 1,ARow - 1]; ctInteger,ctFloat: Value := FloatToStr(XLS.Sheets[TabSet.TabIndex].AsFloat[ACol - 1,ARow - 1]); else Value := XLS.Sheets[TabSet.TabIndex].AsWideString[ACol - 1,ARow - 1]; end; end; procedure TForm8.GridSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); begin EditText := Trim(Value); end; procedure TForm8.SetCellValue(Col,Row: integer); begin if Copy(EditText,1,1) = '=' then XLS.Sheets[TabSet.TabIndex].AsFormula[Col,Row] := Copy(EditText,2,MAXINT) else begin try XLS.Sheets[TabSet.TabIndex].AsFloat[Col,Row] := StrToFloat(EditText); except XLS.Sheets[TabSet.TabIndex].AsWideString[Col,Row] := EditText; end; end; end; procedure TForm8.GridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin lblCell.Caption := ColRowToRefStr(ACol - 1,ARow - 1,False,False); case XLS.Sheets[TabSet.TabIndex].CellType[ACol - 1,ARow - 1] of ctNumberFormula, ctStringFormula, ctBooleanFormula: edCell.Text := '=' + XLS.Sheets[TabSet.TabIndex].AsFormula[ACol - 1,ARow - 1]; else edCell.Text := XLS.Sheets[TabSet.TabIndex].AsWideString[ACol - 1,ARow - 1]; end; if (EditCol = Grid.Col) and (EditRow = Grid.Row) then SetCellValue(Grid.Col - 1,Grid.Row - 1); end; procedure TForm8.GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if (Key = VK_RETURN) and (EditCol = Grid.Col) and (EditRow = Grid.Row) then SetCellValue(Grid.Col - 1,Grid.Row - 1); end; procedure TForm8.FormCreate(Sender: TObject); begin
Grid.ColWidths[0] := 30;
end; procedure TForm8.Button3Click(Sender: TObject);
begin
XLS.Filename := edFilename.Text;
XLS.Write;
end; end.

  

Delphi TXLSReadWriteII2 带的demo中直接编辑XLS文件的例子的更多相关文章

  1. android 内部缓存器(手机自带的存储空间中的当前包文件的路径)

    关于Context中: 1. getCacheDir()方法用于获取/data/data/<application package>/cache目录 2. getFilesDir()方法用 ...

  2. 在 Visual Studio 中打开编辑 cshtml 文件时出现错误:未能完成该操作 无效指针 的解决方法

    第一步:关闭 Visual Studio: 第二步:删除 %LocalAppData%\Microsoft\VisualStudio\14.0\ComponentModelCache 下的所有文件: ...

  3. ibatis.net 中SqlMaps的xml文件的例子

    <?xml version="1.0" encoding="utf-8" ?> <!--=========================== ...

  4. php中使用PHPExcel读写excel(xls)文件的方法

    首先从GitHub上下载 excel的相关类库 下载地址:https://github.com/PHPOffice/PHPExcel 以下是从excel中获取数据 <?php /** * * @ ...

  5. 在Delphi中编辑res文件

    先用记事本编写一个rc的文件.如内容为:_Comms RCData Comms.jpg Comms.jpg为图片名称,然后在这个rc文件和图片拷贝到delphi安装路径的bin文件夹里面,选中这两个文 ...

  6. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  7. Delphi 自带的 Base64 编解码函数

    今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...

  8. Delphi 自带的字符串分割函数split

    下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...

  9. Delphi 自带了 Base64 编解码的单元

    Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因.  这个单元提供两套四个公开函数:  对流的编解码: procedu ...

随机推荐

  1. 神州数码OSPF路由协议

    实验要求:熟练掌握OSPF配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip addres ...

  2. webpack配置(入口出口)

    const path=require('path'); //是node.js的path模块 //单入口,单出口 module.exports={ // 入口文件 entry:{ entry:'./sr ...

  3. python中类的创建和实例化

    python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号: python中实例化类不需要使用关键字new(也没有这个关键字),类的实例化类似函数调用方式: # ...

  4. js: var定义域问题

  5. imp导入时 出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决方法

    cmd命令下--执行imp命令时,出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决办法:在imp命令里加入 statistics=none (不导入数据库统计信息) ...

  6. webpack学习笔记(三)

    访问网址: https://github.com/webpack/analyse "scripts": { "dev-build": "webpack ...

  7. DL服务器主机环境配置(ubuntu14.04+GTX1080+cuda8.0)解决桌面重复登录

    DL服务器主机环境配置(ubuntu14.04+GTX1080+cuda8.0)解决桌面重复登录 前面部分是自己的记录,后面方案部分是成功安装驱动+桌面的正解 问题的开始在于:登录不了桌面,停留在重复 ...

  8. 18.3 #define DM9000_DBG(fmt,args...) printf(fmt, ##args)代表什么

    标准C支持可变参数的函数,意味着函数的参数是不固定的,例如printf()函数的原型为:int printf( const char *format [, argument]... ) 而在GNU C ...

  9. gcc centos 新版本的安装方法

    因为centos默认安装的gcc是GCC 4.*.* 是不支持 C++11 的,所以有些新的程序或软件要安装就行要升级GCC,否则无法编译通过 一.如下步骤安装不成功(yum install devt ...

  10. 【剑指offer】广度优先遍历二叉树

    问题:从上往下打印出二叉树的每个节点,同层节点从左至右打印. *思路:先用队列存放树的根结点.每次出队一个结点,将结点非空的左右孩子分别入队.重复此过程,直到队列为空. import java.uti ...