安卓表格框架-ExcelView

article/2025/9/23 14:21:57

转载请标明来源:安卓表格框架-ExcelView_分享+记录-CSDN博客

Github地址,欢迎star:https://github.com/September26/ExcelView 

一.项目介绍

项目是仿照WPS中Excel的功能实现的,实现了显示,滑动,编辑等基本功能,并且结构简单,可扩展性强,绘制性能较高。
当然,距离真正的商用还差有一定的差距,比如导出,公式计算,自动扩展等等都还未实现,希望后续使用的人能够一起参与进来,逐渐的进行完善和扩展。

二.效果简介

效果图1:整体简介

效果图2:拖动效果

效果图3:选中效果 

效果图4:选择不可选中范围

效果图5:编辑功能

三.使用介绍

1.依赖ExcelViewLib库。'io.github.september26:excelview:0.9.0'。(需依赖mavenCentral库)
2.简单使用方式参照app中的fragment1和fragment2。
3.可扩展性:可通过继承ControlImpl重写其方法实现不同的业务场景逻辑。
4.可扩展性:可自定义Dialog,通过ControlImpl于ExcelView组合实现自定义样式。

四.核心元素介绍

采用组合的设计模式,主要对象有以下几个,
* ExcelView:负责数据以及各种状态的渲染。
* ExcelEditDialog:选中某个cell后弹出复制,粘贴,加减乘除等选择框。
* KeyBoardDialog:负责对选中数据的编辑操作。
* ExcelControl:逻辑处理器。负责以上三个对象之间的关系关联。后续的导出xls功能,也通过由其负责串联。
* CommonSeekBar,CommonVerticalSeekBar:横向纵向的滚动条。

五.实现逻辑介绍

WPS中excel实现了相当多的功能,不可能完全都实现,所以本项目聚焦于其核心功能实现即可。
核心功能总结下来就是读,写,存这三点,围绕这三点,我们整理下我们要实现的需求点:
* 1.在一屏幕的范围内显示几十甚至上百个Cell,并且不能卡顿。
* 2.一屏显示不下时,可以横向,纵向,斜向拖动表格,并且滑动流畅。
* 3.横向,纵向标题的实现。
* 4.可以进行单元格的选中。
* 5.可以通过拖动的方式实现批量的选择。
* 6.不可编辑区域的实现。
* 7.可以针对选中的单元格进行数据上的修改操作。
* 8.显示弹出框,支持对数据进行修。
* 9.修改的数据进行变色显示。
* 10.横向,纵向标题的实现。
* 11.编辑好的数据,可以导出到xls文件当中。(暂未实现)

围绕这11个需求点,我们挨个去讨论下如何去实现。
* 1.在一屏幕的范围内显示几十甚至上百个Cell,并且不能卡顿。
大批量的显示数据,第一个想到的肯定是RecyclerView搭配GridLayout,但是实际上简单试了下,由于RecyclerView的原理仍然是每个Cell都需要单独创建,所以效率是很低的,采用RecyclerView的
方案会导致首次进入相当的卡顿,所以这个方案弃用。
想要高效率的绘制,我们首先要了解下整个View的渲染流程,这里就不详细展开了,我们实现的核心就是用一个View去实现所有的功能,抛出掉measure和layout方法,只重写draw方法。因为View的数量多少对draw方法影响
是很小的。
所以最终决定采用Canvas自绘的方式,所以的内容,分割线的位置都一次性计算好,然后通过canvas进行绘制。

* 2.一屏显示不下时,可以横向,纵向,斜向拖动表格,并且滑动流畅。
假设我们横向有10个cell,但是横向一屏只能显示5个cell,那我们想显示4到9的cell时怎么办呢?这里我想了一个简单的实现方案,还是按照10个去计算,显示4到9的时候,只要每个cell的x值都减去4个cell的宽度即可。
这样第0到4个cell,会因为x轴计算为负数而被挤出屏幕,也就不会在屏幕内显示了。高度的实现原理也是一样的。
滑动自然采用的是重写dispatchTouchEvent方法计算横向纵向偏移的方式。

* 3.横向,纵向标题的实现。
横向标题和纵向标题,这个需要逻辑特殊处理下。横向标题的话,一样计算一个偏移量,然后每个cell的Y坐标都在基础之上增加这个偏移量。纵向原理类似。


* 4.可以进行单元格的选中。
单元格选中是下面这种样式的,实现不难,因为单元格是挨个计算的,所以计算到这个单元格的时候,额外添加样式即可。
但是因为绘制选中单元格肯定会影响四周的单元格,所以我这里进行了两遍绘制,先绘制所有单元格,然后再去绘制选中单元格,选中单元格的样式是直接覆盖上去的。

* 5.可以通过拖动的方式实现批量的选择。
拖动选择和拖动表格都用到了手势监听,所以肯定会有冲突。我这里的解决方案就是看是否先选中,如果选中了某个cell则认为是拖动选择,否则认为是拖动表格。

* 6.不可编辑区域的实现。
手势滑动,滑动结束后计算坐标,如果在不可编辑区域,则把选中的范围做适当的修改。

* 7.可以针对选中的单元格进行数据上的修改操作。
个人很欣赏RcyclerView的组合模式,所以这里我也使用了组合的设计模式。ExcelView本身只注重数据的渲染和选择,修改,变色等等所有的逻辑都交给外部类来控制。

* 8.显示弹出框,支持对数据进行修改。
组合模式分为三块,弹出框Dialog, ExcelView,组合器Control。编辑的弹出框并不直接和ExcelView绑定,而是通过Control来实现一个双向的绑定。
这样ExcelView可以适配不同的Dialog,同样的Dialog也可以适配不同的ExcelView。

* 9.修改的数据进行变色显示。
ExcelView提供一个功能,设置范围的颜色,由外部来调用。这样不仅仅修改后可以进行变色,用户完全可以根据特定场景,根据自己的选择来使用。

* 10.横向纵向拖动条的显示。
这个实现难点在于纵向的滑动条。借鉴网上的方案进行了实现。也放到项目里面供选择使用。

* 11.编辑好的数据,可以导出到xls文件中。
目前还未实现,目前是打算使用poi的方式进行导出。


http://chatgpt.dhexx.cn/article/hP1pYmIv.shtml

相关文章

html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

windwow.print()用于打印当前窗口的内容,很简便,可当内容特殊并且打印有特殊需求的时候就要绕个圈了。下面是需要打印的表格: 当数据量少的时候像上面的表格一样,中间的内容只有5条数据,打印出来在纸上会有空白,不太好。中间内容是不确定的可能几十条,可能上百条,这样循…

在线表格

在线表格案例 模仿的是腾讯文档 首先观察腾讯文档的表格效果&#xff0c;然后在构建出思路&#xff0c;开始编写代码 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>在线表格<…

Java获取word表格中的数据

前言: 有时系统中需要提取各种文件中的数据&#xff0c;比如做报表的系统中就常常与Excel表格数据做交互。做Excel报表数据时有选择POI实现的&#xff0c;但是POI功能也很单一&#xff0c;对于文档格式维护性差&#xff0c;最重要的是POI在操作word数据时显得力不从心&#xf…

HTML 表格元素

表格元素 在日常生活中&#xff0c;我们对表格已经非常熟悉了&#xff0c;表格的基本作用是用来存放数据&#xff0c;它是数据的二维容器&#xff0c;人们常常用它来记录财务数据、列车时刻表、电视节目单等。 大多数情况下&#xff0c;表格都是由列标题或行标题&#xff0c;…

Bootstrap3 表格样式

表格 HTML表格是数据的二维容器&#xff0c;它的基本作用是用来存放数据。表格能够清晰、直观地描述数据间的逻辑关系&#xff0c;如果借助CSS设计表格的样式&#xff0c;阅读数据将会变得更轻松。 表格结构包括众多标签&#xff0c;这些标签各司其职&#xff0c;共同完成二维…

数据库表格查询

1、数据库表示存储数据中所有数据的对象&#xff0c;在表中&#xff0c;数据按行和烈格式逻辑组织&#xff0c;类似于电子表格&#xff0c;数据库是SchoolMangeSystem&#xff0c;使用数据库表是SYS_Student&#xff0c;如下图&#xff1a; select字段列表&#xff0c;字段别名…

html中标题距离顶部距离,版式设计中标题间距的使用法则

主标题与副标题定义 主标题是文案的核心主旨&#xff0c;可以直接表达&#xff0c;也可以含蓄表达&#xff0c; 副标题是对对主标题意思的具体阐释&#xff0c;或者主标题意思的进一步延伸。 字距与行距 横向的字间距与纵向的行间距的关系&#xff1a; 请保持行间距的高度&…

表格解析 概览

表格解析发展至今&#xff0c;仍然是一项很年轻的研究领域&#xff0c;出现了大量解决方案&#xff0c;常用的技术包括&#xff1a;线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派&#xff0c;从中了解这项任务背后所采用的技术。在…

5.让表格的标题在滚动表格时一动不动

一、冻结首行首列 处理数据量较大的表格时&#xff0c;向下拖动滚动条&#xff0c;表格的标题栏就不见了&#xff0c;用户在查看数据时&#xff0c;需要来回拖动滚动条才能看到标题&#xff0c;那么是否可以将表格设置成无论怎样滚动表格&#xff0c;标题都始终显示呢&#xf…

python表格控件_python表格控件

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! pyqt5表格控件qtableview简介在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到qtableview类了,在qtableview中可…

element-ui(vue)表格的自定义标题,逻辑判断

<el-table :data"tableData" style"width: 100%" border><el-table-column width"180"><!-- 自定义标题--><template slot"header"><i class"el-icon-time"></i><span>自定义标题…

tomcat-命令窗口乱码

问题描述&#xff1a;刚下载的tomgcat不添加任何项目直接运行时&#xff0c;tomcat的命令窗口出现中文乱码 解决方法&#xff1a; 1、找到${CATALINA_HOME}/conf/logging.properties 2、添加语句&#xff1a;java.util.logging.ConsoleHandler.encoding GBK 3、重启tomcat&…

在此处打开命令窗口 (Open command window here)

在此处打开命令窗口 (Open command window here) 1. 在此处打开命令窗口 (Open command window here) Shift 鼠标右键 2. .exe 执行 在 .exe 文件所在的文件夹打开命令提示符窗口。如果使用的是 Windows Vista 或 Windows 7 系统&#xff0c;则需要在 Windows Explorer 中右…

mysql自动弹出命令窗口 解决

为什么mysql会自动弹出来命令窗口 关键词&#xff1a; Unable to connect to remote host. Catalog download has failed. 解决办法&#xff1a; 控制面板&#xff08;小图标&#xff09;->管理工具->任务计划程序->mysql->installer 右键禁用即可

win10系统中如何显示在此处打开命令窗口

1、首先按住windowsr键&#xff0c;在弹出的窗口中输入regedit&#xff0c;点击回车 2、找到 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\cmd&#xff0c;在右侧的框中&#xff0c;鼠标选择“默认”项&#xff0c;右键点击“修改”&#xff0c;在弹出的窗口中输入“…

Windows10如何在文件夹打开DOS命令窗口

在安装RabbitMQ的时候&#xff0c;总结了一下在当前文件夹打开DOS窗口的方式&#xff0c;大概有三种方式&#xff0c;推荐使用第三种。 &#xff08;这里D:\Tools\RabbitMQ\RabbitMQServer\rabbitmq_server-3.9.8\sbin作为目标文件夹&#xff09; 第一种方式 1、winr&#xf…

记录下使用plsql命令窗口执行sql脚本的写法

如果把sql脚本放在sql窗口中执行&#xff0c;速度比较慢&#xff0c;所以可以在命令窗口中输入sql脚本的位置来执行 SQL> C:\Users\Administrator\Desktop\脚本.txt 注意&#xff0c;路径前要加上&#xff0c;否则不会执行。

linux基础-- 桌面系统如何切换命令窗口

简单说一下linux 的一些基本命令&#xff0c;对linux的命令进行一个简单的了解。&#xff08;操作系统为centos7&#xff09; 一般我们个人安装的centos的时候会安装一个桌面系统. window是带有桌面&#xff0c;linux不同的版本也会带有自己的桌面系统的。而centos有两种常见…

matlab运行.m文件的命令,怎样在matlab的命令窗口运行.m文件

www.mh456.com防采集。 有两种方法&#xff1a;1、选中m文件&#xff0c;鼠标右键run&#xff0c;即可。2、在命令窗口输入m文件的名字&#xff0c;即可。觉得有帮助就采纳吧。 这要看你的M文件是函数文件还是脚本&#xff1a;如果是函数function开头&#xff0c;比如function …

1. Win 10 :在此处打开命令窗口

1.在此处打开CMD命令行窗口 在当前目录下打开命令窗口 步骤&#xff1a; - altd定位到资源管理器地址栏。 - 输入cmd后回车截图讲解 ①&#xff1a; ②&#xff1a; ③&#xff1a; 2.在此处打开Windows Powershell 在需要操作的文件夹下按住Shift鼠标右键&#x…