0

またお願いします。

Excel スプレッドシートから呼び出しているアイテムのリストを作成しようとしています。列 A に国のリストが含まれているとします。

America
South Africa
Belgium
America

現在、対応する行の国に関連付けられている他のアイテムがありますが、列 D にあるため、このように、最初のセルの国に対応する他の列にさらにアイテムがある可能性があります。

______________A__________________________B___________________C___________

---------------|----------------|-------------|

America........|..Samsung.......|...1234......|

South Africa...|..Dell..........|...54321.....|

Belgium........|..iPhone........|...2345......|

America........|..Nokia.........|...9876......|

これをXMLシートに公開したいのですが、国ごとに何度も作成したくないので、エントリの行を確認し、存在しない場合は作成したいと考えています。したがって、上の表では America を 2 回使用していますが、America を XML エントリとして 1 回だけ作成する必要があり、そこから他のアイテムを添付します。

今のところ、毎回異なるため、シート内の行を数えて行データを取得しています。次に、XML の記述を開始する必要があります。

use Spreadsheet::Read;

#use XML::Writer

my $book = ReadData("InfoDB.xlsx");

my @rows = Spreadsheet::Read::rows($book->[1]);

my $count = 1;

my @clause_all;

foreach $tab (@rows) {
    $count++;
    @row = Spreadsheet::Read::cellrow($book->[1], $count);
    @country = $row[1];
}

誰かがこれを配列に一致させるのを手伝ってくれるか、どういうわけかそれは素晴らしいでしょう! 私はたくさんの方法を試しましたが、完璧な結果を得ることができませんでした. :(

4

2 に答える 2

0

ハッシュを作成し、国名をキーとして使用します。次に、新しいデータをそのキーに格納されている配列参照にプッシュします。これが疑似コードです。それを機能させるには、スプレッドシートの狂気を振りかける必要があります。

%countries = ();
foreach my $row ( @rows) {
  my ($country, $thing, $number) = row2columns($row);
  push @{ $countries{$country} }, [ $thing, $number ];
}

これで、好みの方法で XML に変換できる大きなハッシュが得られました。

于 2013-05-06T20:56:10.563 に答える