Phpspreadsheet 中文文档(一) 访问单元格

PhpOffice/PhpSpreadsheet读取和写入Excel PhpSpreadsheet读取和写入Excel 阅读详情

访问单元格 

访问电子表格中的单元格应该非常简单。本主题列出了一些访问单元的选项。

通过坐标设置单元格值

可以使用工作表的setCellValue()方法来按坐标设置单元格值 。

// 用字符串值设置单元格A1
$spreadsheet->getActiveSheet()->setCellValue('A1', 'PhpSpreadsheet');

// 用数值设置单元格A2
$spreadsheet->getActiveSheet()->setCellValue('A2', 12345.6789);

// 设置单元A3具有布尔值
$spreadsheet->getActiveSheet()->setCellValue('A3', TRUE);

// 用公式设定单元格A4
$spreadsheet->getActiveSheet()->setCellValue(
    'A4',
    '=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))'
);

或者,您可以检索单元格对象,然后调用单元格的setValue()方法:

$spreadsheet->getActiveSheet()
    ->getCell('B8')
    ->setValue('Some value');

创建一个新的单元格

如果您呼叫getCell(),而该储存格尚不存在,则PhpSpreadsheet将(预设)为您建立储存格。如果您不想创建新的单元格,则可以传递第二个参数false,getCell()如果该单元格不存在, 则将返回null。

注意:单元分配给变量作为分离引用

作为“内存中”模型,PHPSpreadsheet可能对内存的要求很高,尤其是在处理大型电子表格时。一种用于减少此内存开销的技术是单元缓存,因此,单元实际上是保存在一个集合中,而在使用电子表格时,该集合可能保存在内存中,也可能不保存在内存中。因此,对getCell() (或任何类似方法)的调用将返回单元格数据以及指向该集合的指针。尽管通常这不是问题,但如果将调用结果分配给getCell()变量,则可能会变得很重要。尽管单元对象仍将保留其数据值,但随后进行的其他单元格调用都将取消设置该指针。

这是什么意思?考虑以下代码:

$spreadSheet = new Spreadsheet();
$workSheet = $spreadSheet->getActiveSheet();

// 设定我们想要评估的公式的细节,以及它所依赖的任何数据
$workSheet->fromArray(
    [1, 2, 3],
    null,
    'A1'
);

$cellC1 = $workSheet->getCell('C1');
echo 'Value: ', $cellC1->getValue(), '; Address: ', $cellC1->getCoordinate(), PHP_EOL;

$cellA1 = $workSheet->getCell('A1');
echo 'Value: ', $cellA1->getValue(), '; Address: ', $cellA1->getCoordinate(), PHP_EOL;

echo 'Value: ', $cellC1->getValue(), '; Address: ', $cellC1->getCoordinate(), PHP_EOL;

调用会getCell('C1')返回C1包含其值(3)的单元格,以及返回到集合的链接(用于标识其地址/坐标C1)。随后对访问单元格的调用将A1 修改的值$cellC1,从而断开其与集合的链接。

因此,当我们尝试再次显示值和地址时,可以显示其值,但是尝试显示其地址/坐标将引发异常,因为该链接已设置为null。

注意:有一些内部方法会从集合中获取其他单元格,这也将把您可能已分配给变量的任何单元格的链接分离。

Excel数据类型

MS Excel支持7种基本数据类型:

  • 串
  • 数
  • 布尔值
  • 空值
  • 式
  • 错误
  • 内联(或富文本)字符串

默认情况下,当您调用工作表的setCellValue()方法或单元格的setValue()方法时,PhpSpreadsheet将为PHP空值,布尔值,浮点数或整数使用适当的数据类型;或将传递给该方法的任何字符串数据值转换为最合适的数据类型,这样数字字符串将=转换为数字,而以开头的字符串值将转换为公式。非数字字符串或不=以前导开头的字符串将被视为真正的字符串值。

此“转换”由单元格“值绑定器”处理,您可以编写自定义“值绑定器”以更改这些“转换”的行为。标准的PhpSpreadsheet程序包还提供了一个“高级绑定值”,用于处理许多更复杂的转换,例如将分数格式(例如“ 3/4”的字符串)转换为数字值(在这种情况下为0.75),并设置适当的“分数”数字格式掩码。同样,将类似“ 5%”的字符串转换为0.05的值,并应用百分比格式的掩码,将包含类似于日期的值的字符串转换为Excel序列化的datetimestamp值,并应用相应的掩码。从csv文件加载数据时,此功能特别有用,

高级价值绑定程序处理的格式包括:

  • TRUE或FALSE(取决于语言环境设置)将转换为布尔值。
  • 标识为科学(指数)格式的数字字符串将转换为数字。
  • 将分数和粗俗的分数转换为数字,并应用适当的数字格式掩码。
  • 将百分比转换为数字,然后除以100,然后应用适当的数字格式掩码。
  • 日期和时间将转换为Excel时间戳值(数字),并应用适当的数字格式掩码。
  • 当字符串包含换行符(\n)时,单元格样式将设置为自动换行。

您可以在本文档的此部分后面阅读有关价值约束的更多信息。

在单元格中设置公式

如上所述,如果= 在单元格中存储第一个字符为a的字符串值。PHPSpreadsheet会将该值视为公式,然后您可以通过getCalculatedValue()对单元格进行调用来评估该公式。

但是,有时您可能希望存储以= 字符串开头的值,并且您不希望PHPSpreadsheet像公式一样对它进行求值。

为此,您需要通过将其值设置为“引用文本”来“转义”该值。

// 用公式设定单元格A4
$spreadsheet->getActiveSheet()->setCellValue(
    'A4',
    '=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))'
);
$spreadsheet->getActiveSheet()->getCell('A4')
    ->getStyle()->setQuotePrefix(true);

然后,即使您要求PHPSpreadsheet返回cell的计算值 A4,它也将以=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1)) 字符串形式返回,而不是尝试计算公式。

在单元格中设置日期和/或时间值

日期或时间值在Excel中作为时间戳保存(一个简单的浮点值),数字格式掩码用于显示该值应如何设置格式;因此,如果要在单元格中存储日期,则需要计算正确的Excel时间戳,并设置数字格式掩码。

// 获取当前日期/时间并转换为Excel日期/时间
$dateTimeNow = time();
$excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel( $dateTimeNow );
// 用Excel日期/时间值设置单元格A6
$spreadsheet->getActiveSheet()->setCellValue(
    'A6',
    $excelDateValue
);
// 设置数字格式掩码,使excel时间戳显示为人类可读的日期/时间
$spreadsheet->getActiveSheet()->getStyle('A6')
    ->getNumberFormat()
    ->setFormatCode(
        \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME
    );

用前导零设置数字

默认情况下,PhpSpreadsheet将自动检测值类型并将其设置为适当的Excel数字数据类型。这种类型转换由值绑定器处理,如本文档标题为“使用值绑定器以方便数据输入”的部分所述。

数字没有前导零,因此,如果您尝试设置确实有前导零的数字值(例如电话号码),则这些数字通常会在将值强制转换为数字时丢失,因此“ 01513789642”将显示为1513789642。

您可以通过两种方式强制PhpSpreadsheet覆盖此行为。

首先,您可以将数据类型显式设置为字符串,以便不将其转换为数字。

// 将单元格A8设置为数值,但是告诉PhpSpreadsheet它应该被当作字符串处理
$spreadsheet->getActiveSheet()->setCellValueExplicit(
    'A8',
    "01513789642",
    \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING
);

或者,您可以使用数字格式掩码来显示前导零的值。

// 用数值设置单元格A9
$spreadsheet->getActiveSheet()->setCellValue('A9', 1513789642);
// 设置一个数字格式掩码,将数值显示为带有前导零的11位数字
$spreadsheet->getActiveSheet()->getStyle('A9')
    ->getNumberFormat()
    ->setFormatCode(
        '00000000000'
    );

使用数字格式屏蔽,您甚至可以将数字分成几组,以使值更易于阅读。

// 用数值设置单元格A10
$spreadsheet->getActiveSheet()->setCellValue('A10', 1513789642);
// 设置一个数字格式掩码,将数值显示为带有前导零的11位数字
$spreadsheet->getActiveSheet()->getStyle('A10')
    ->getNumberFormat()
    ->setFormatCode(
        '0000-000-0000'
    );

注意:在检索格式化的值以在“屏幕上”显示时,或者对于某些编写器(例如HTML或PDF),并不是所有这样的复杂格式掩码都可以使用,但可以与真正的电子表格编写器(Xlsx和Xls)一起使用。

设置数组中的单元格范围

通过将值数组传递给fromArray()方法,也可以在单个调用中设置单元格值的范围。

$arrayData = [
    [NULL, 2010, 2011, 2012],
    ['Q1',   12,   15,   21],
    ['Q2',   56,   73,   86],
    ['Q3',   52,   61,   69],
    ['Q4',   30,   32,    0],
];
$spreadsheet->getActiveSheet()
    ->fromArray(
        $arrayData,  // 要设置的数据
        NULL,        // 具有该值的数组值不会被设置
        'C3'         // 工作表的左上角坐标范围我们要设置这些值(默认为A1)
    );

如果传递二维数组,则将其视为一系列行和列。一维数组将被视为单行,如果您要从数据库中获取数据数组,这将特别有用。

$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
$spreadsheet->getActiveSheet()
    ->fromArray(
        $rowArray,   // 要设置的数据
        NULL,        // 具有该值的数组值不会被设置
        'C3'         // 工作表的左上角坐标范围我们要设置这些值(默认为A1)
    );

如果您有一个简单的1-d数组,并希望将其写为一列,则以下内容会将其转换为结构正确的2-d数组,可以将其馈送到该fromArray()方法中:

$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
$columnArray = array_chunk($rowArray, 1);
$spreadsheet->getActiveSheet()
    ->fromArray(
        $columnArray,   // 要设置的数据
        NULL,           // 具有该值的数组值不会被设置
        'C3'            // 工作表的左上角坐标范围我们要设置这些值(默认为A1)
    );

通过坐标检索单元格值

若要检索单元格的值,应首先使用getCell()方法从工作表中检索该单元格。可以使用getValue()方法读取单元格的值。

// 从单元格A1中获取值
$cellValue = $spreadsheet->getActiveSheet()->getCell('A1')->getValue();

这将检索单元格中包含的原始,未格式化的值。

如果单元格包含一个公式,并且您需要检索计算的值而不是公式本身,则使用该单元格的 getCalculatedValue()方法。这将在计算引擎中进一步说明 。

// 从单元格A4中获取值
$cellValue = $spreadsheet->getActiveSheet()->getCell('A4')->getCalculatedValue();

或者,如果要查看应用了任何单元格格式的值(例如,对于人类可读的日期或时间值),则可以使用单元格的getFormattedValue()方法。

// 从单元格A6中获取值
$cellValue = $spreadsheet->getActiveSheet()->getCell('A6')->getFormattedValue();

按列和行设置单元格值

可以使用工作表的setCellValueByColumnAndRow()方法来按坐标设置单元格值 。

// 用字符串值设置单元格A5
$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(1, 5, 'PhpSpreadsheet');

注意:列引用以1for column 开头A。

按列和行检索单元格值

若要检索单元格的值,应首先使用getCellByColumnAndRow()方法从工作表中检索该单元格。可以使用以下代码行再次读取单元格的值:

// 从单元格B5中获取值
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(2, 5)->getValue();

如果需要计算出的像元值,请使用以下代码。这将在计算引擎中进一步说明。

// 从单元格A4中获取值
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(1, 4)->getCalculatedValue();

检索单元格值范围到数组

另外,也可以在使用一个单一的呼叫以检索范围的细胞的值到一个数组toArray(),rangeToArray()或 namedRangeToArray()方法。

$dataArray = $spreadsheet->getActiveSheet()
    ->rangeToArray(
        'C3:E5',     // 我们要检索的工作表范围
        NULL,        // 空单元格应返回的值
        TRUE,        // 是否应该为每个单元格计算( get计算值的等价性() )
        TRUE,        // 每个单元格的值应该格式化为( getFormattedValue的等价形式() )
        TRUE         // 该数组应该由单元格行和单元格列索引
    );

这些方法都将返回一个二维的行和列数组。该 toArray()方法将返回整个工作表;rangeToArray() 将返回指定的范围或单元格;while namedRangeToArray()将返回定义的内的单元格named range。

遍历单元格

使用迭代器遍历单元格

循环单元的最简单方法是使用迭代器。使用迭代器,可以使用foreach循环工作表,工作表中的行以及行中的单元格。

下面是一个示例,其中我们读取工作表中的所有值并将其显示在表格中。

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load("test.xlsx");

$worksheet = $spreadsheet->getActiveSheet();

echo '<table>' . PHP_EOL;
foreach ($worksheet->getRowIterator() as $row) {
    echo '<tr>' . PHP_EOL;
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(FALSE); // 这个循环遍历所有单元格,即使没有设置单元格值。
                                                       // 默认情况下,只有具有值集的单元格才会被迭代。
    foreach ($cellIterator as $cell) {
        echo '<td>' .
             $cell->getValue() .
             '</td>' . PHP_EOL;
    }
    echo '</tr>' . PHP_EOL;
}
echo '</table>' . PHP_EOL;

请注意,我们已将单元格迭代器设置 setIterateOnlyExistingCells()为FALSE。这使得迭代器循环工作表范围内的所有单元格,即使它们尚未设置。

null如果未在工作表中设置,单元格迭代器将返回a 作为单元格值。将单元格迭代器设置 setIterateOnlyExistingCells()为false会循环工作表中当时可用的所有单元格。如果需要,这将创建新的单元并增加内存使用!仅在打算循环所有可用单元时才使用它。

使用索引循环遍历单元格

可以使用按列和行索引访问单元格值的可能性,[1, 1]而不是'A1'用于循环读取和写入单元格值。

注意:在PhpSpreadsheet中,列索引和行索引基于1。就是'A1'〜[1, 1]

下面是一个示例,其中我们读取工作表中的所有值并将其显示在表格中。

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load("test.xlsx");

$worksheet = $spreadsheet->getActiveSheet();
// 获取工作表中引用的最高行列号
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5

echo '<table>' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
    echo '<tr>' . PHP_EOL;
    for ($col = 1; $col <= $highestColumnIndex; ++$col) {
        $value = $worksheet->getCellByColumnAndRow($col, $row)->getValue();
        echo '<td>' . $value . '</td>' . PHP_EOL;
    }
    echo '</tr>' . PHP_EOL;
}
echo '</table>' . PHP_EOL;

另外,您可以利用PHP的“ Perl风格”字符增量器按坐标循环遍历单元格:

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load("test.xlsx");

$worksheet = $spreadsheet->getActiveSheet();
// 获取工作表中引用的最高行号和列字母
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
// 增加最高列字母
$highestColumn++;

echo '<table>' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
    echo '<tr>' . PHP_EOL;
    for ($col = 'A'; $col != $highestColumn; ++$col) {
        echo '<td>' .
             $worksheet->getCell($col . $row)
                 ->getValue() .
             '</td>' . PHP_EOL;
    }
    echo '</tr>' . PHP_EOL;
}
echo '</table>' . PHP_EOL;

请注意,我们不能<=在此处进行比较,因为'AA'它将与匹配<= 'B',因此我们递增最高的列字母,然后$col !=在递增的最高列中循环。

使用价值粘结剂方便数据输入

在内部,PhpSpreadsheet使用默认 \PhpOffice\PhpSpreadsheet\Cell\IValueBinder实现(\ PhpOffice \ PhpSpreadsheet \ Cell \ DefaultValueBinder)使用单元格的setValue()方法确定输入数据的数据类型(该 setValueExplicit()方法会绕过此检查)。

(可选)可以修改PhpSpreadsheet的默认行为,以便更轻松地输入数据。例如,一个 \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder类可用。它会自动将百分比,科学格式的数字和以字符串形式输入的日期转换为正确的格式,同时还设置单元格的样式信息。下面的示例演示如何在PhpSpreadsheet中设置值活页夹:

/** PhpSpreadsheet */
require_once 'src/Boostrap.php';

// 设定连接器的值
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );

// 创建新的电子表格对象
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();

// ...
// 增加一些数据,类似于一些不同的数据类型
$spreadsheet->getActiveSheet()->setCellValue('A4', 'Percentage value:');
// 将字符串值转换为0.1并设置百分比单元格样式
$spreadsheet->getActiveSheet()->setCellValue('B4', '10%');

$spreadsheet->getActiveSheet()->setCellValue('A5', 'Date/time value:');
// 将字符串值转换为Excel日期戳并设置日期格式单元格样式
$spreadsheet->getActiveSheet()->setCellValue('B5', '21 December 1983');

创建自己的价值粘合剂很容易。需要高级值绑定时,可以实现 \PhpOffice\PhpSpreadsheet\Cell\IValueBinder接口或扩展 \PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinderor \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder类

PhpSpreadsheet一个读取和写入电子表格文件的纯PHP库 PhpSpreadsheet一个读取和写入电子表格文件的纯 PHP 库。允许您读取和写入不同的电子表格文件格式,如 Excel 和 LibreOffice Calc。 立即下载

相关推荐

从零开始:手把手教你用VOACAP软件预测短波最佳工作频率(OWF)

本文详细介绍了如何使用VOACAP软件预测短波通信的最佳工作频率(OWF),涵盖软件安装、参数配置、电离层模型设置及结果解读。通过实战案例和优化技巧,帮助用户掌握短波传播特性,提升通信效率。特别适合业余无线电爱好者和专业通信人员参考。

weixin_30897079的博客 647

PHP使用PhpSpreadsheet库的操作Excel表格

PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到使用 PhpSpreadsheet 开发的PHP要求 7.1或更高版本PhpSpreadsheet 支持链式操作。

工作中学习,学习中进步 3434

本地AI助手部署指南:DeepSeek Harness与Ollama集成实践

AI Agent作为当前人工智能领域的热门技术,通过模拟人类决策过程,能够自主规划、调用工具并执行复杂任务。其核心原理在于将大语言模型的推理能力与外部工具API相结合,形成可闭环的工作流。这种技术架构的价值在于显著提升了AI系统的实用性和自动化水平,使其从单纯的对话工具转变为能够解决实际问题的智能助手。在应用场景上,AI Agent广泛应用于代码生成、数据分析、自动化办公等领域。本文聚焦于如何通过DeepSeek Harness平台与Ollama本地模型的集成,实现隐私安全、离线可用的AI助手部署方案,特别

dengjuanshou7445的博客 474

PhpSpreadsheet中文文档 | 简介

1、PhpSpreadsheet 是什么 PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式 PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到 使用 PhpSpreadsheet 开发的PHP要求 7.1或更高版本 PhpSpreadsheet 支持链式操作 2、PhpSpreadsheet 支持的文件格式

jackbon8的博客 4万+

12V电源电路五层防护设计实战指南

12V电源电路是工业控制、车载电子和智能终端中最基础的供电架构,其可靠性不取决于稳压精度,而取决于对反接、浪涌、短路、过温等典型故障的响应能力。理解TVS钳位原理、P-MOSFET防反接机制及eFuse可编程限流逻辑,是构建鲁棒电源系统的核心。技术价值在于将保护从‘事后补救’升级为‘事前拦截’,显著提升产品MTBF并降低售后返修率。典型应用场景涵盖PLC辅助电源、ADAS摄像头供电、IoT网关主板等严苛环境设备。本文聚焦12V输入端到负载输出端的五层串行防护链设计,深度融合TVS选型、MOSFET导通阈值与

weixin_30983965的博客 295

芯片测试中的DC与AC模式详解:如何选择最适合你的测试方案?

本文深入解析了芯片测试中DC(直流)与AC(交流)模式的核心差异与互补性。DC测试关注静态电气特性,如固定型故障;而AC测试则聚焦于芯片在额定工作速度下的动态时序行为。文章从VLSI设计、电路模块、成本约束、可测试性设计和应用场景五大维度,提供了如何根据工艺节点、工作频率及具体需求,在testMode配置、时钟复位策略和输入输出接口设计中,平衡两种测试模式以制定最优方案的决策框架。

bb456的博客 1086

PhpSpreadsheet读写Excel文件

本文介绍PhpSpreadsheet读写excel文件的一些使用方法。

测试开发小记 5497

复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)

复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)

wo12369874的博客 1700

phpspreadsheet 中文文档(一) 访问单元格

2019年10月11日11:45:09 访问单元格 访问电子表格中的单元格应该非常简单。本主题列出了一些访问单元的选项。 通过坐标设置单元格值 可以使用工作表的setCellValue()方法来按坐标设置单元格值。 // Set cell A1 with a string value $spreadsheet->getActiveSheet()->setCellValue('A1...

Z.X的博客 550

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108

【教程4>第5章>第19节】基于Gardner环的位同步系统MATLAB仿真与带时偏基带数据导出

由于在FPGA中,时偏的影响主要是由系统收发两端晶振的不同步带来的,所以在仿真测试阶段,很难直接通过FPGA来模拟这个因素,所以我们采用MATLAB模拟带时偏的基带输入信号,并将其导出,由FPGA调用作为测试信号源。可以看到,同步之后(图3)相对于带时偏的基带信号(图2),其更接近标准的数据(图1),且抖动较小。订阅过的朋友可以复习下这个课程,没有订阅的朋友,也可以直接复制如下的程序进行仿真测试。上述程序中,加入时偏的基带信号,通过子函数。同步之后,可以恢复出标准的QPSK星座图。

FPGA/MATLAB学习教程/源码/项目合作开发 520

PhpSpreadsheet中文文档 | 基础Spreadsheet开发使用示例

· 1、 实例化Spreadsheet对象 <?php namespace app // 给类文件的命名空间起个别名 use PhpOffice\PhpSpreadsheet\Spreadsheet; //Xlsx类 保存文件功能类 use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // 实例化 Spreadsheet 对象 $spreadsheet = new Spreadsheet(); 2、 Spreadsh

jackbon8的博客 4万+

YOLO26 正式发布源代码!极致速度优化方案, 面向工业级落地的目标检测模型!

YOLO26 作为 Ultralytics 公司于 2025 年 9 月发布的最新一代目标检测模型,在架构设计和技术实现上展现了显著的创新。本文深入分析了 YOLO26 的核心架构改进和技术原理,重点探讨了其在边界框回归、推理流程、损失函数设计和优化算法方面的突破性进展。

魔改工程师的博客 1243

PhpSpreadsheet中文文档 | Spreadsheet操作教程实例

Spreadsheet 支持excel 函数 公式使用 <?php namespace app # 给类文件的命名空间起个别名 use PhpOffice\PhpSpreadsheet\Spreadsheet; # Xlsx类 将电子表格保存到文件 use PhpOffice\PhpSpreadsheet\Writer\Xlsx; # 实例化 Spreadsheet 对象 $spreadsheet = new Spreadsheet(); # 获取活动工作薄 $sheet = $

jackbon8的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PhpSpreadsheet怎么设置单元格边框

$styleArray = [ 'borders' => [ 'allBorders' => [ 'borderStyle' => Border::BORDER_THIN //细边框 ] ] ]; $worksheet->getStyle('A1:N1')->applyFromArray($sty...

Luyy的学习生涯 5837

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

phpspreadsheet 中文文档 粗翻版

http://get.ftqq.com/9211.get 官方使用文档https://phpspreadsheet.readthedocs.io/en/stable/topics/accessing-cells/ api文档https://phpoffice.github.io/PhpSpreadsheet/master/PhpOffice.html 翻译的是使用文档,机翻+校验,因为现在单个文档内容放的东西有限分成几篇文章 只翻译标题的主要部分 文档部分主要的菜单↓↓ Ac...

jshyzx1999的博客 365

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PHPSpreadsheet学习笔记——访问单元格

可以使用按列和行访问单元格值的可能性 索引,而不是用于读取和写入单元格值 循环。[1, 1]‘A1’也可以在一次调用中通过以下方式设置单元格值范围 将值数组传递给方法。可以将单元格值范围检索到数组中的数组 使用 或 方法进行单个调用。下面是一个示例,我们读取工作表中的所有值,并且 在表格中显示它们。下面是一个示例,我们读取工作表中的所有值,并且 在表格中显示它们。首先,您可以将数据类型显式设置为字符串,以便它是 未转换为数字。使用数字格式掩码,您甚至可以将数字分成几组 以使值更易于阅读。

AvoidSilent的博客 840

【PhpSpreadsheet】ThinkPHP5+PhpSpreadsheet实现批量导出数据

ThinkPHP5+PhpSpreadsheet实现批量导出excel表格数据,PhpSpreadsheet类库API使用,单元格设置、文档属性、图片、日期、函数,

qq_25285531的博客 2424

详解PhpSpreadsheet设置单元格

PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。 在调试设置时,确保引入了正确的文件并实例化。 use PhpOffice\PhpSpreadsheet\Spreadsheet; $spreadsheet = new Sprea...

daxingsuo3996的博客 1240

PhpSpreadsheet的使用(一)

一、安装 1、修改php.ini配置文件,开启fileinfo扩展: 2、使用composer安装: composer require phpoffice/phpspreadsheet 一、引入加载文件 <?php /* phpspreadsheet版本1.8.2 */ require_once './vendor/autoload.php'; use PhpOffice...

weixin_44027022的博客 4266

PhpSpreadsheet 内存优化实战:基于 PSR-16 的单元格缓存机制完整指南

PhpSpreadsheet 是一个纯 PHP 的电子表格读写库,当处理大型工作簿时,单元格对象的常驻内存会迅速成为瓶颈。本文以官方文档 [docs/topics/memory_saving.md](https://link.gitcode.com/i/fed9de097f6cc461c3b58929ec00d1b3) 为核心骨架,深入讲解 PhpSpreadsheet 的单元格缓存(Cell C

gitblog_00389的博客 730

Phpspreadsheet 中文文档(七)技巧和诀窍

您也可以折叠列。请注意,您还应该将列设置为不可见,否则折叠将在Excel 2007中不可见。请参阅“分组/概述一行”部分以获取有关折叠的完整示例。您可以指示PhpSpreadsheet将摘要添加到右侧(默认)或左侧。您也可以折叠该行。请注意,您还应该将行设置为不可见,否则折叠将在Excel 2007中不可见。$i

withoutfear的博客 3264

Phpspreadsheet中文文档2(翻译软件版)

由于phpoffice/phpexcel(此包已被放弃,不再维护。作者建议改用phpoffice/phpspreadsheet包。) 最近开始使用Phpspreadsheet,发现中文文档不全。自己英文水平一般,又比较着急开发。所以贴上google翻译版,着急的朋友可以先凑合看看,英文底子好的同学可以直接忽略本帖。 本贴仅供参考。 本贴仅供参考。 本贴仅供参考。 原文地址: Phpspreadsheet官方文档 文件 » 主题 ” 读写文件 读写文件 从体系结构您已经知道,使用基本PhpSpreads

qq_29466853的博客 1262

PhpSpreadsheet读取单元格内容的坑

在利用php读取Excel时,当前(2019年)流行的做法是利用composer安装PhpSpreadsheet(composer require phpoffice/phpspreadsheet)来操作,示例代码如下: $abs_excel_path = $_SERVER['DOCUMENT_ROOT'] . '/data.xlsx'; $spreadsheet = \PhpOffi...

canlynetsky的博客 9450
上一篇: PhpSpreadsheet 实现Excel多sheet导出
下一篇: Phpspreadsheet 中文文档(二) 结构+自动筛选
withoutfear
博客等级 码龄13年 541粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值