如何动态修改cxGrid当前单元格的颜色和字体
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态修改cxGrid当前单元格的颜色和字体相关的知识,希望对你有一定的参考价值。
比如AViewInfo.Item.ID in [i, j] 或AviewInfo.RecordViewInfo.GridRecord.Values[i]为第i列符合条件的值.if (AViewInfo.Item.ID in [6, 7]) and (trim(AViewInfo.RecordViewInfo.GridRecord.Values[8]) = \'T\') then
begin
ACanvas.Brush.Color := clmoneygreen;
ACanvas.Font.Name := \'Times New Roman\';
ACanvas.Font.Size := 10;
ACanvas.Font.Color := clCaptionText;
end;
祝你愉快,满意请采纳哦 参考技术A 比如AViewInfo.Item.ID in [i, j] 或AviewInfo.RecordViewInfo.GridRecord.Values[i]为第i列符合条件的值.
if (AViewInfo.Item.ID in [6, 7]) and (trim(AViewInfo.RecordViewInfo.GridRecord.Values[8]) = 'T') then
begin
ACanvas.Brush.Color := clmoneygreen;
ACanvas.Font.Name := 'Times New Roman';
ACanvas.Font.Size := 10;
ACanvas.Font.Color := clCaptionText;。
使用 Maatwebsite Excel 3.1 导出如何设置单元格的背景颜色和标题的字体大小?
【中文标题】使用 Maatwebsite Excel 3.1 导出如何设置单元格的背景颜色和标题的字体大小?【英文标题】:Using Maatwebsite Excel 3.1 Export how to set background color for cells and font size for heading? 【发布时间】:2020-02-01 10:45:06 【问题描述】:我正在使用 Maatwebsite Excel 3.1 来实现导出功能。我们如何设置单元格的背景颜色和标题的字体大小?您能帮我解决这个问题吗?
谢谢!
【问题讨论】:
【参考方案1】:首先,实现WithHeadings
并添加use RegistersEventListeners
。这将允许您使用 afterSheet
方法自动连接到事件:
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\RegistersEventListeners;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
class BomExport implements FromArray, WithEvents
use RegistersEventListeners;
public static function afterSheet(AfterSheet $event)
// Add styling here
// ...
有关放置样式代码的其他方法,请查看documentation。
在afterSheet
方法中,您可以访问底层库及其Worksheet
对象(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet):
$sheet = $event->sheet->getDelegate();
使用该对象,您可以例如:
在第一行设置字体大小、粗细和颜色:
$sheet->getStyle('1')->getFont()
->setSize(16)
->setBold(true)
->getColor()->setRGB('0000ff')
设置第二列的背景颜色:
$sheet->getStyle('B')->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('FFFF0000');
在单元格上设置边框粗细:
$sheet->getStyle('D3')->getBorders()->getAllBorders()
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
设置行高:
$sheet->getRowDimension('1')->setRowHeight(26);
有关更多选项,请参阅documentation。
不幸的是,整行 ($sheet->getStyle('1')
) 和列 ($sheet->getStyle('B')
) 的样式在 Excel Mobile(版本 16001.12325.20032.0)中不起作用,我必须使用单元格范围($sheet->getStyle('A1:Z1')
或 $sheet->getStyle('A1:A999')
)
把它放在一起:
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\RegistersEventListeners;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
class BomExport implements FromArray, WithEvents
use RegistersEventListeners;
public static function afterSheet(AfterSheet $event)
$sheet = $event->sheet->getDelegate();
$sheet->getStyle('1')->getFont()->setSize(16);
$sheet->getStyle('1')->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('FFFF0000');
// ...
// ...
【讨论】:
【参考方案2】:使用 html 和 FromView
关注点。documentation
示例 Maatwebsite 导出 FromView concern:
运行工匠命令:php artisan make:export ExampleExportView
将输出的ToCollection
类更改为ToView
类下面(php artisan help 没有显示ToView
选项,所以我们必须自己更改)。
<?php
namespace App\Exports;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class ExampleExportView implements FromView
private $table;
public function __construct($table)
$this->table = $table;
public function view(): View
$tableHtml = $this->table;
return view('exports.exampleview', compact('tableHtml'));
在 exports
目录中创建 exampleview.blade.php
文件并带有 laravel 回显:
!! $tableHtml !!
从您的控制器构建 html 表并实例化 ExampleExportView
类,将 html 表传递给构造函数,同时返回 Excel
外观的下载方法:
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Exports\ExampleExportView;
use Maatwebsite\Excel\Facades\Excel;
class ExampleController extends Controller
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function downloadExcel()
$filename = "example_excel_maatwebsite_from_colour_view";
$table = <<<TABLE
<h2>Maatwebsite Excel FromView</h2>
<table>
<thead>
<tr>
<th style='background-color: #007bff; color: #f8f9fa;'>Heading one blue</th>
<th style='background-color: #dc3545; color: #f8f9fa;'>Heading two red</th>
</tr>
</thead>
<tbody>
<tr>
<td style='background-color: #ffb759;'>18 Yellow</td>
<td>17 no colour</td>
</tr>
</tbody>
</table>
TABLE;
return Excel::download(new ExampleExportView($table),
$filename .'.xlsx');
注册您的路线:
Route::get('download-excel-html-table', 'ExampleController@downloadExcel')
->name('download-excel-html-table');
将路线放置在您的索引刀片中,它将下载包含五个填充数据的单元格的 excel 文件。
单元格“A1”将有一个带有单词 Maatwebsite Excel FromView
的大标题。
单元格“A2”的值为Heading one blue
,蓝色背景为白色文本,“B2”值为Heading two red
,红色背景为白色文本,而“A3”为黄色,值为@987654339 @ 和 'B3' 没有颜色,值为 17 no colour
。
您还可以使用内联 css 来设置 html 样式(全部记录在案):
<html>
HTML::style('css/table.css')
<!-- Cell styled with class -->
<td class="cell">Cell</td>
<!-- Cell styled with ID -->
<td id="cell">Cell</td>
</html>
当然,这是一个小的静态示例。我通过循环数据数组并将颜色分配给 html td 来构建大型“工作表”填充器。
【讨论】:
【参考方案3】:试试这样的:
$sheet->row(1, ['Col 1', 'Col 2', 'Col 3']); // etc
$sheet->row(1, function($row)
$row->setBackground('#CCCCCC');
);
您也可以将 $sheet->row() 更改为 $sheet->cell() 并继续传递行号作为第一个参数。
$sheet->cell(1, function($row)
$row->setBackground('#CCCCCC');
);
【讨论】:
【参考方案4】:我有一个控制器
public function exportComplaint($request)
return Excel::download(new ComplaintExport($complaintData), 'excel.xls');
在 App\Exports 中
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ComplaintExport implements FromArray, WithHeadings
protected $request = null;
public function __construct($request)
$this->request = $request;
public function array(): array
return $this->request;
public function headings(): array
return ['name','contacts']; //etc
在上面的代码中我需要在哪里添加sheet
函数?
【讨论】:
这不是答案。它应该已经发布在问题中。以上是关于如何动态修改cxGrid当前单元格的颜色和字体的主要内容,如果未能解决你的问题,请参考以下文章
如何在Qt 的tableview中根据某一单元格的数据来设置该行的字体颜色或背景色。