如何动态修改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当前单元格的颜色和字体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google 表格中获取单元格的字体颜色?

如何在Qt 的tableview中根据某一单元格的数据来设置该行的字体颜色或背景色。

如何动态更改表格视图单元格的颜色

java汇中如何修改excel单元格的背景色

c# datagridview 单个 单元格的样式(即字号或者字体颜色)发生改变时候,触发啥事件???

QTableView,设置单元格的字体和背景颜色