【问题标题】:PhpExcel new line in cell单元格中的 PhpExcel 新行
【发布时间】:2017-05-07 17:10:31
【问题描述】:

我做什么:

  1. 从数据库查询数据
  2. 分解数据并插入\n
  3. 准备数组
  4. 打开模板
  5. 将数组插入模板
  6. 尝试将 \n 替换为新行

如何找到 \n 并插入新行?例如,我在 A1 中有下一个文本“One\nTwo”。我从 A1 阅读文本

$ltr='A1';
$vle=$spreadsheet->getActiveSheet()->getCell($ltr);

在此之后,我尝试在 A1 中再次在 A1 中插入文本,并在一个单元格中将 \n 替换为新行

$spreadsheet->getActiveSheet()->getCell($ltr)->setValue("${vle}");
$spreadsheet->getActiveSheet()->getStyle($ltr)->getAlignment()->setWrapText(true);

但这对我不起作用。

例如:

所以,如果我打开带有文本的模板,我无法替换单元格中的 \n。我能做什么?

更新。我尝试使用 char(10) 并插入公式(例如)="hello"&char(10)&"world" 但仅插入 ="hello"&char(10)

【问题讨论】:

  • 如何替换文本中的\n?提供的示例中有显示多行单元格的示例
  • @MarkBaker 问题已解决。我公布了答案。

标签: php phpexcel phpoffice


【解决方案1】:

如果您问的是this issue on the PHPspreadsheet github issues log,那么这是您对 PHP 字符串理解的问题。

$dataArray = [
    ['2010', 'Q1', 'United\nStates', 790],
    ['2010', 'Q2', 'United States', 730],
    ['2010', 'Q3', 'United States', 860]
]

单引号中的'\n' 被视为文字\n;双引号中的"\n" 被视为换行符。所以要么使用双引号构建你的数组:

$dataArray = [
    ['2010', 'Q1', "United\nStates", 790],
    ['2010', 'Q2', "United States", 730],
    ['2010', 'Q3', "United States", 860]
]

或使用 str_replace 将文字 \n 转换为新行:

$modified = str_replace('\n', "\n", $original);

【讨论】:

    【解决方案2】:

    在 Excel 公式中使用“char(10)”。 & = 连接,并且 char(10) = \n

    $textWithNewLine = '="hello"&char(10)&"world"';
    $spreadsheet->getActiveSheet()->getCell($ltr)->setValue($textWithNewLine);
    

    【讨论】:

    • 我明白了。使用 char(10) 这相当于 excel 中的新行。 $textWithNewLine = 'hello&char(10)&world' $spreadsheet->getActiveSheet()->getCell($ltr)->setValue($textWithNewLine);
    • 仅在第一个 & 之前插入。在您的示例中仅插入 ="hello"&char(10)
    【解决方案3】:

    当我分解/内爆 str 并插入 \n 时,我使用 ''。需要使用“”

    implode("\n", $array);
    

    【讨论】:

      【解决方案4】:

      如果您在 Moodle Excel 应用程序中使用 MoodleExcelWorkbook 类,并且您想在单元格中设置自动换行/换行,请使用如下代码:

      require_once $CFG->libdir . '/excellib.class.php';
      $workbook = new \MoodleExcelWorkbook("-");
      $workbook->send('YOUR_FILE_NAME.xlsx');
      $worksheet = $workbook->add_worksheet('YOUR_SHEET_NAME');
      /* do your some stuff here */
      /* make 'text_wrap' => true in $format attribute */
      $worksheet->write_string(1/*row*/, 1/*col*/, 'YOUR_VALUE', ['text_wrap' => true]);
      $workbook->close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-23
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多