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. sqlserver2008数据库自动备份的sql脚本及使用bat命令执行脚本

    -----sql脚本 declare @fileName varchar(255) ,--定义备份文件名变量         @dbname varchar(255)--定义备份数据库名变量decla ...

  2. Reasoning With Neural Tensor Networks For Knowledge Base Completion-paper

    https://www.socher.org/index.php/Main/ReasoningWithNeuralTensorNetworksForKnowledgeBaseCompletion 年份 ...

  3. struts2 自定义异常拦截器配log4j

    log4j.rootLogger = debug,stdout,F log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.app ...

  4. java初始重点语法

    第三章 if基本语法: if(条件){// 表达式 // 代码块 } eg: int a = 10; if(a > 1){ System.out.println("内容"); ...

  5. 集合总结四(LinkedHashMap的实现原理)

    一.概述 按照惯例,先看一下源码里的第一段注释: Hash table and linked list implementation of the Map interface, with predic ...

  6. grep init 与 grep [i]nit

    看grep的知识点的时候,在XXX博客里看到一个这样的例子,一直在纠结,纠结,init与[i]nit 匹配到的东西不应该时一样的嘛,为什么一个匹配得出来,一个不行.后来在群里问了某位大哥,耐心的讲解, ...

  7. Python手记(二)

    1.map函数 map函数用于将指定的数据成员都使用指定函数进行处理. 比如: map(float, arr) map(square, arr) 这两个函数分别将arr中成员转换为float类型,以及 ...

  8. 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)

    http://ask.dcloud.net.cn/question/28090 https://blog.csdn.net/qq_37508970/article/details/86649703 各 ...

  9. 对于HTML页面中CSS, JS, HTML的加载与执行过程的简单分析

    来自   https://blog.csdn.net/u011088260/article/details/79563315   最近在研究HTML页面中JavaScript的执行顺序问题.在Java ...

  10. docker入门 什么是docker? 为什么使用docker?

    1.什么是docker? 轻量级操作系统虚拟化解决方案 2.为什么使用docker? 1.docker的启动是秒级的,比传统虚拟机快很多 2.资源利用率高,一台主机上可同时运行数千个docker容器 ...