原帖是太長了:Fetching zero cells in XLS file using Spreadsheet::ParseExcel'狀態'是否總是開始從後續行解析?
xls的數據結構。文件看起來像下面:
col1 col2 col3 col4 col5
row1 School 1
row2 Dean John
row3 No.stu. 55
row4 some irrelevant stuff
row5 School2 2
row6 Dean Tony
row7 No. stu. 60
row8 some irrelevant stuff
row9 School 3
row10 Dean James
row11 No.stu. 56
row12 No. teacher 20
row13 School 4
row14 Dean Tom
row15 No.stu. 79
row16 No. teacher 21
row17 course
row18 math 2
row19 eng 4
row20 teacher name age gender race
row21 Jane 20 female white
row22 student name Lee
row23 SAT 1434
row24 gender male
作爲imran建議,我使用以下結構使用Spreadsheet :: ParseExcel;
my %data;
my $state = "";
my $school = "";
my $student = "";
my ($row_min, $row_max) = $worksheet->row_range();
my $row = $row_min;
while ($row <= $row_max) {
my $cell0 = $worksheet->get_cell($row, 0);
my $cell1 = $worksheet->get_cell($row, 1);
if (defined($cell0)) {
my $key = $cell0->value();
if ($key eq 'School') {
$state = 'school';
$school = $cell1->value();
} elsif ($key eq 'course') {
$state = 'course';
} elsif ($key eq 'teacher') {
$state = 'teacher';
} elsif ($key eq 'student') {
$state = 'student');
$student = $worksheet->get_cell($row, 2)->value();
} else {
$data{$school}{$key} = $cell1->value();
}
} elsif ($state eq 'course') {
# process columns for course
} elsif ($state eq 'teacher') {
# process columns for teacher
} elsif ($state eq 'student') {
# process columns for student
}
$row++;
}
它工作得很好。
但似乎在每個state
,它開始從第二行解析。也就是說,如果我們聲稱當然是一個狀態,並且它從下一行開始處理,直到它到達下一個state
。然而,如果例如,過程狀態具有用於每個學校略微不同的數據結構,即鍵和用於state
當然值之一是在同一行中,
School 1
course math
eng
...
School 2
course phy
...
School 3
course chem
gym
music
如果我粘到原始代碼使用:
} elsif ($key eq 'course') {
$state = 'course';
$course = $worksheet->get_cell($row, 1)->value();
}
和相應散列表爲:
} elsif ($state eq 'course') {
my $key = $cell1->value();
$data{$school}{$course}{$key} =$cell1->value();
}
然而
,它只能解析
'1' => {
'math' => {
'eng' => 'eng'
},
}
'3' => {
'chem' => {
'gym' => 'gym',
'music' => 'music
},
}
而且沒有爲school2
解析。
問題是,如果這個模塊有任何靈活性,可以從我想要的地方解析出來嗎?
最好的問候,
huh ??? ???您的代碼是指定位置的代碼。該模塊將隨時爲您提供您需要的任何單元格的內容。 – ikegami 2013-04-23 07:08:14
是的。 @ kailash19這是我想要的結構。但不知何故,我無法做出正確的哈希表。比如說,如果我定義了「課程」單元格作爲關鍵字所在的行,我當然會丟失同一行中的值。在這個例子中,我只能從'school 1','gym'和'music'解析'eng'到'school 3'。 – user2198367 2013-04-23 07:57:17