2017-12-01 14 views
-1

질문 : xml 데이터를 Excel 파일로 인쇄하려고하지만 Excel 파일로 인쇄하지 못합니다.Perl XML :: Simple Excel 파일로 인쇄

XML 파일 : 인 data.xml 아래

<?xml version="1.0" encoding="UTF-8"?> 
<ns1:BoardTestXMLExport numberOfIndictedComponents="11" testerTestStartTime=".00000:00" testTime=".00000:00" repairStationId="vvts03" testStatus="Reviewed Passed" testerTestEndTime=".00000:00" xmlns:ns1="http://tempuri.org/BoardTestXMLExport.xsd" numberOfIndictedPins="0" numberOfComponentsTested="113" numberOfJointsTested="0" numberOfDefects="11" repairStatus="Reviewed Passed"> 
      <ns1:BoardXML imageId="0" serialNumber="R174842442 1P00232G01 R02 1C31228G01 R07 JH1711327" assemblyRevision="1P00232G01-LF-SS" boardType="1P00232G01-LF-SS" boardRevision="1511417735000"/> 
      <ns1:StationXML testerName="huaemsaoi004" stage="V510"/> 
      <ns1:RepairEventXML numberOfVariationOkDefects="0" numberOfFalseCalledPins="0" numberOfRepairedComponents="0" numberOfVariationOkPins="0" numberOfRepairedPins="0" numberOfRepairLaterPins="0" numberOfFalseCalledDefects="11" numberOfActiveDefects="0" numberOfVariationOkComponents="0" repairEndTime="2017-11-23T14:31:05.000+08:00" repairStartTime="2017-11-23T14:30:58.000+08:00" numberOfRepairLaterDefects="0" repairOperator="1066689" numberOfRepairLaterComponents="0" numberOfActiveComponents="0" numberOfActivePins="0" numberOfRepairedDefects="0" numberOfFalseCalledComponents="11"/> 
      <ns1:TestXML name="r1"> 
        <ns1:IndictmentXML algorithm="rep-3a99979127l-lf" indictmentType="Left off, Right off"> 
           <ns1:RepairActionXML repairOperator="1066689" repairTime="2017-11-23T14:30:58.000+08:00" repairActionType="-" indictmentType="Left off, Right off" comment="-" repairStatus="False Call"/> 
           <ns1:ComponentXML packageId="EP-3A99979127L-LF" partId="EP-3A99979127L-LF" designator="r1"/> 
        </ns1:IndictmentXML> 
      </ns1:TestXML> 
</ns1:BoardTestXMLExport> 

내 코드 :

# use module 
use strict; 
use warnings; 
use XML::Simple; 
use Data::Dumper; 
use Excel::Writer::XLSX; 

# create object 
my $xml = XML::Simple->new; 

# create object 
my $xml = XML::Simple->new; 

#create excel object 
my $OutFile = "Output". "\." . "xlsx"; 
my $workbook = Excel::Writer::XLSX->new($OutFile); 
my $worksheet = $workbook->add_worksheet('SotredProcedures'); 

# Create a format for the column headings 
my $header = $workbook->add_format(); 
$header->set_bold(); 
$header->set_color('red'); 
# Create a Text Wrap format 
my $format1 = $workbook->add_format(); 
$format1->set_text_wrap(); 
$worksheet->write(0, 0, "RepairStationID", $header); 
$worksheet->write(0, 1, "BoardType", $header); 
$worksheet->write(0, 2, "ComponentsTested", $header); 
$worksheet->write(0, 3, "NumberOfDefects", $header); 
$worksheet->set_column(0, 1, 12); 
$worksheet->set_column(1, 2, 20); 
$worksheet->set_column(1, 3, 20); 
$worksheet->set_column(1, 4, 20); 
# read XML file 
my $data = $xml->XMLin("data.xml",KeyAttr=>"ns1"); 
print $data ->{"ns1:BoardXML"}->{"boardType"}->{$worksheet}; 

결과 : 엑셀 파일에 boardtype를 인쇄하는 데 실패, 다음과 같이 출력 :

Error message

어떻게해야합니까?

+3

XML :: Simple을 사용하지 마십시오. 라이브러리 자체에서 사용하지 말라고 알려줍니다. 자세한 내용은 [왜 XML :: Simple "Discouraged?] (https://stackoverflow.com/q/33267765/1030675)를 참조하십시오. – choroba

+0

@choroba 우리는 마지막 질문에서 그들에게 말했다. 도와주세요. ;) – simbabque

+0

대부분의 작업을 마치고 지금은 이제 Excel 파일로 인쇄해야합니다. – huang

답변

0

해시 참조로 1P00232G01-LF-SS 문자열에 액세스하려고한다는 오류 메시지가 표시됩니다. 즉,이 라인에서 온다 : 엑셀 파일의 시트를 나타냅니다 귀하의 $worksheet is an object

print $data->{"ns1:BoardXML"}->{"boardType"}->{$worksheet}; 
. 해시 키로 사용할 수 없으며 $data->{"ns1:BoardXML"}->{"boardType"} 값은 문자열입니다. 데이터를 액세스 할 수있는 해시 참조가 없습니다.

워크 시트에 데이터를 쓰는 방법을 이미 알고 있습니다 (인쇄).

$worksheet->write(0, 1, "BoardType", $header); 

는 이제 시트에 데이터를 쓸 수 같은 일을 수행해야합니다 당신은 위의 해.

$worksheet->write(1, 1, $data ->{"ns1:BoardXML"}->{"boardType"}, $format1); 

글쓰기 행을 변경해야한다는 점에 유의하십시오. 이제 행이 1이므로 write의 첫 번째 인수를 변경해야합니다.

+0

의심스러운 품질의 질문에 대한 답변을 제공 한 사람이 내 대답을 왜곡 한 적이 있습니까? – simbabque