使用 Perl Excel 循环遍历单列而不是每一列

Posted

技术标签:

【中文标题】使用 Perl Excel 循环遍历单列而不是每一列【英文标题】:Using Perl Excel to Loop Through A Single Column and Not Every Columns 【发布时间】:2019-02-13 20:07:03 【问题描述】:

我当前的 Perl 代码循环遍历 Excel 工作表中的每一行和每一列。

如果我在 Excel 中有 3 列数据,如何仅循环通过第 2 列来读取和写入特定数据?根据下面输入的数据,目标是将单元格从 Apples 更改为 Peaches。 以下是我的代码以及代码下方的尝试解决方案。我需要将第 2 列中的苹果替换为桃子,但第 1 列中的苹果保持不变。

注意:我回答了我自己的问题,但如果有人有更好的解决方案,那将是一个很好的学习课程。

输入:

  1           2           3
Grapes     Spinach     Mustard
Oranges    Apples      Ketchup
Apples     Potatoes    Horseradish

输出:

   1           2           3
Grapes     Spinach     Mustard
Oranges    Peaches     Ketchup
Apples     Potatoes    Horseradish

我的代码:

#! /usr/bin/perl
use v5.10.0;
use warnings;

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::WriteExcel;

my $parser = Spreadsheet::ParseExcel::SaveParser->new();
my $workbook_R = $parser->parse('C:\Perl\databases\input.xls');

my $workbook_W = Spreadsheet::WriteExcel->new('C:\Perl\databases\output.xls');
my $worksheet_W = $workbook_W->add_worksheet();

for my $worksheet_R ($workbook_R->worksheets()) 

my ($row_min, $row_max ) = $worksheet_R->row_range();
my ($col_min, $col_max ) = $worksheet_R->col_range(); 

  for my $row ($row_min .. $row_max ) 
  for my $col ($col_min .. $col_max ) 

  my $value = $worksheet_R->get_cell($row, $col)->value;

# Testing if Apples Replace Peaches
  $value =~ s/Apples/Peaches/g;
  $worksheet_W->write($row, $col, $value);
  
 

我的一些解决方案是:

   1)        my $value = $worksheet_R->get_cell($row, 2)->value;
   2)        $worksheet_W->write($row, 2, $value);
   3)        for my $col ($col == 2 ) 

所有结果都是不正确的数据输出。

【问题讨论】:

您提到您已阅读其他问题;你有没有尝试过任何解决方案?我认为这是家庭作业,对吗?显然你没有写这个(或者你知道答案)......询问家庭作业或“借用”代码很好,但你仍然需要展示你的尝试并解释 *specific 除了“它不工作”之外,您遇到的问题。请参阅“How to Ask”以及help center 上的信息以及如何创建minimal reproducible example。此checklist..中的更多好提示。 Parse Excel data raises "File error"的可能重复 这个网站上有几篇帖子,还有其他帖子回答了完全相同的问题。相同的示例数据和所有内容。多么巧合,嗯? This will help you find them. 我是这些帖子的作者。 阅读问题。他们在问完全不同的事情。一个问题不仅仅是相同的变量。 【参考方案1】:

对第 2 列和其他列使用 if/else 语句。

解决办法如下:

my $value = $worksheet_R->get_cell($row, $col)->value;

  if ($col ==1) 
# Apples Replace Peaches for ONLY Column 2
  $value =~ s/Apples/Peaches/g;
  $worksheet_W->write($row, $col, $value);
  
    else 
      # Print the other data in other columns
      $worksheet_W->write($row, $col, $value);
  

【讨论】:

它的工作原理是将条件仅写入第 1 列,并将所有其他数据写入其他列。 从 0. 0 开始计数,1 = 2 列。

以上是关于使用 Perl Excel 循环遍历单列而不是每一列的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Perl 循环中访问哈希查找表

使用VBA循环遍历每一列并从大到小排序

如何循环遍历 Perl 目录中的文件? [复制]

循环遍历 Excel 工作表并使用 C# 将文本保存到 TXT 文件中

Python,遍历 Excel 电子表格

在使用 map 循环遍历数组时返回 null 而不是 JSX