У меня есть файл xls, который я хочу по-разному раскрасить.
Мой файл xlsx похож на приведенный ниже, назовем его sample.xlsx
>sp|Q96B97|SH3K1_HUMAN SH3 domain-containing kinase-binding protein 1 OS=Homo sapiens OX=9606 GN=SH3KBP1 PE=1 SV=2
MVEAIVEFDYQAQHDDELTISVGEIITNIRKEDGGWW
>sp|Q9UBS4|DJB11_HUMAN DnaJ homolog subfamily B member 11 OS=Homo sapiens OX=9606 GN=DNAJB11 PE=1 SV=1
KLALQLHPDRNPDDPQAQEKFQDLGAAYEVLSDSEKRKQYD
>sp|P61916|NPC2_HUMAN NPC intracellular cholesterol transporter 2 OS=Homo sapiens OX=9606 GN=NPC2 PE=1 SV=1
CQLSKGQSYSVNVTFTSNIQSKSSKAVVHGILMGVP
Iхочу прочитать, а затем сохранить его, когда я раскрасю буквы.Я хочу раскрасить D в желтый цвет
>sp|Q96B97|SH3K1_HUMAN SH3 domain-containing kinase-binding protein 1 OS=Homo sapiens OX=9606 GN=SH3KBP1 PE=1 SV=2
MVEAIVEF**D**YQAQH**DD**ELTISVGEIITNIRKE**D**GGWW
>sp|Q9UBS4|DJB11_HUMAN DnaJ homolog subfamily B member 11 OS=Homo sapiens OX=9606 GN=DNAJB11 PE=1 SV=1
KLALQLHPDRNP**DD**PQAQEKFQ**D**LGAAYEVLS**D**SEKRKQY**D**
>sp|P61916|NPC2_HUMAN NPC intracellular cholesterol transporter 2 OS=Homo sapiens OX=9606 GN=NPC2 PE=1 SV=1
CQLSKGQSYSVNVTFTSNIQSKSSKAVVHGILMGVP
Я пытался сделать это безуспешно
#!/usr/bin/perl
use strict;
use warnings;
use Spreadsheet::WriteExcel;
use Excel::Writer::XLSX;
# Create an Excel workbook and worksheet
my $workbook = Spreadsheet::WriteExcel->new('output.xls');
my $workbook = Excel::Writer::XLSX->new( 'sample.xlsx' );
if ( !defined $workbook ) {
die $parser->error(), ".\n";
}
my $worksheet = $workbook->add_worksheet();
my $highlight = $workbook->add_format();
$highlight->set_bg_color('yellow');
my $row = 0;
while (<sample>) {
chomp;
next unless /$search_pattern/D;
my $col = 0;
my @fields = split;
foreach my $field (@fields) {
if ( $field =~ /$search_pattern/D ) {
$worksheet->write_string($row, $col, $field, $highlight);
}
else {
$worksheet->write_string($row, $col, $field);
}
$col++;
}
$row++;
}
$workbook->close()
каждая вторая строка начинается с >sp
что следует игнорировать.Шаблон поиска должен применяться к другой строке, которая не имеет >sp|
Отредактировано
Теперь я могу читать xls и печатать их
#!/usr/bin/perl
use strict;
use warnings;
use Excel::Reader::XLSX;
my $reader = Excel::Reader::XLSX->new();
my $workbook = $reader->read_file( 'sample.xlsx' );
if ( !defined $workbook ) {
die $reader->error(), "\n";
}
for my $worksheet ( $workbook->worksheets() ) {
my $sheetname = $worksheet->name();
print "Sheet = $sheetname\n";
while ( my $row = $worksheet->next_row() ) {
while ( my $cell = $row->next_cell() ) {
my $row = $cell->row();
my $col = $cell->col();
my $value = $cell->value();
print " Cell ($row, $col) = $value\n";
}
}
}
#Sheet = Sheet1
# Cell (0, 0) = >sp|Q96B97|SH3K1_HUMAN SH3 domain-containing kinase-binding protein 1 OS=Homo sapiens OX=9606 GN=SH3KBP1 PE=1 SV=2
# Cell (1, 0) = MVEAIVEFDYQAQHDDELTISVGEIITNIRKEDGGWW
# Cell (2, 0) = >sp|Q9UBS4|DJB11_HUMAN DnaJ homolog subfamily B member 11 OS=Homo sapiens OX=9606 GN=DNAJB11 PE=1 SV=1
# Cell (3, 0) = KLALQLHPDRNPDDPQAQEKFQDLGAAYEVLSDSEKRKQYD
# Cell (4, 0) = >sp|P61916|NPC2_HUMAN NPC intracellular cholesterol transporter 2 OS=Homo sapiens OX=9606 GN=NPC2 PE=1 SV=1
# Cell (5, 0) = CQLSKGQSYSVNVTFTSNIQSKSSKAVVHGILMGVP
Теперь я хочу сосредоточиться на ячейке (1,0) и Cell (3, 0) и Cell (5, 0)