Ydatagrid,类似Excel的数据表格处理类

本扩展是我在一个项目里面大量使用的,感觉用起来还比较方便,就把它分享上来了,除了YModelDataGrid类里面的quickParseXXX()方法外,其它功能都是通用的

功能:

[indent]简化表格操作、展示代码(可替代CGridView),支持:

  1. %A * %C这样的操作(A列乘以C列)此类操作

  2. 增加列、删除列、交换列、排序、合并单元格

  3. 设置样式、设置表格数据(使用类)

  4. Excel/CVS导出

  5. 跟AR快速关联、关联类直接获取…

  6. …[/indent]

安装:

[indent]1、下载附件,解压,将YDataGrid目录复制到{$app_dir}/protected/extensions/下,将css文件复制到网站的css目录

2、yii配置import中添加:application.extensions.YDataGrid.*

3、在页面上引入css文件(用于渲染表格样式,你也可以自己写)[/indent]

使用:




class StoreNameCell extends YDataGridCell{

    public function render() {

        return Store::getName($this->cell_data); //$this->cell_data表示当前单元格的值

    }

}


//$order_list可以是AR数组,也可以是个数组!

$table = new YDataGrid($order_list, array(

    'columns' => array( //字义列

        'code',

        'name',

        'price',

        'count',

        'store_id',

        'user.name'  //如果此表与user表作了关联,可以直接使用这种方法直接获取到user表的name

    ),

    'key' => array('id', 'status') //指定keys,如果只有一个值时,也可以使用字符

));


$table

->setTitles(array('编码', '名称', '单价', '数量', '门店名称', '操作者')) //设置标题

->render() //可以在每一步都render出来,方便调试

->insertCol(0, 'exp:number_format(%C*%D, 2)', '小计') //在最后插入一列,并将结果保留2位小数

//->render()

->setColumnValues(

    'C' => 'php:number_format($data, 2)', //将第3列数字格式化

    'E' => new StoreNameCell(), //也可以写成:'php:Store::getName($data)'

)

->render();



说明:

[indent]

列名A/B/C…与Excel类似,A表示第一列,0表示最后一列后,-1列表倒数第一列

%B表示第2列

%B3表示第3行第2列的一个单元格

B:D表示从第二列到第四列

2:4表示第2行到第四行

AB表示第27列

在所有可设置列值、表格值的地方,都可以使用:

exp:可以使用php和带%的YDataGrid表达式,也可以使用$data(表示当前单元格)

php:可用变量$data(表示当前单元格)、$key(初始化时设定的key的第一个值)、$keys[i](初始化时设定的key的第i个值)

Class<? extends YDataGridCell>:扩展了YDataGridCell的类实例(这里使用java的写法比较好表达)

使用YExcelDataGrid/YCSVDataGrid时,需要三方扩展:phpexcel

[/indent]

示例:

[indent]

test.pos.lingou.com (发不了链接,汗~~~)

测试用户名:r

密码:123456

[/indent]

源码:

[indent]github.com/ycoe/YDataGrid[/indent]

非常不错的项目.收藏学习

Will take a try soon, thanks for your share.

可以显示表格。 请提供更详细的用法,谢谢。

比如,加入filter?

render(false)时,最左边的的竖线为什么没有显示出来?

html为什么要插入?可否在columns中直接指定?就像类似zii.widgets.grid.CGridView用法。

我有安装phpexcel,如何导出YDataGrid到excel? 下面代码仅列出内容到屏幕。

//$table->toExcelDataGrid() //转换成Excel子类

// ->export(‘文件名’); //导出Excel

你的HTML/EXCEL/CSV/Model Datagrid如何使用?谢谢。

  1. 这个插件只是为比较单纯的表格使用,不想把它做成像Visual Studio那样,直接拖拉就行的,更多的还是面向html/php写代码,所以不会考虑将filter加入此功能,这样也会让这个插件不够灵活

  2. 左边的竖线的问题,这个可以自己在css内添加个样式去渲染,比如table中添加border-right:1px solie red;或者找成用table的background去模拟线条

  3. 展出Excel只需要把测试代码中的render()全部注释掉,把后面的toExcelDataGrid()->export()注释打开就可以了

  4. 正在写使用文档,迟点写完再放上来