मैंने अभी पर्ल में कोडिंग शुरू कर दी है और मैं यह पता लगाने के लिए देख रहा हूं कि नीचे दिया गया कोड अधिक कुशल बनाया जा सकता है या कम लाइनों में किया जा सकता है।पर्ल - कोड संवर्द्धन
मैंने Win32::OLE
मॉड्यूल और Text::CSV
मॉड्यूल में थोड़ा सा शोध किया है, लेकिन यह अब तक जो मैंने पढ़ा है उससे जाने का तरीका प्रतीत होता है।
यह प्रश्न मूल रूप से एक नौसिखिया से पूछने वाला नौसिखिया है: "अरे, मैं बेहतर पर्ल प्रोग्रामर कैसे बनूं?"
कोड का उद्देश्य Excel कार्यपुस्तिका के निर्दिष्ट शीट में निर्दिष्ट श्रेणियों से डेटा प्राप्त करना और उन श्रेणियों की सामग्री CSV फ़ाइलों को लिखना है।
इसके अलावा, मुझे पता है कि मुझे सामान्य चेक लागू करने की आवश्यकता है, जैसे यह सुनिश्चित करना कि मेरा $cellValue
इसे सरणी में जोड़ने से पहले परिभाषित किया गया है, और मैं समग्र संरचना के लिए और अधिक देख रहा हूं। जैसा कि सभी पूरी पंक्ति को एक बार में सरणी में डालकर लूपिंग को फ़्लैट करने का कोई तरीका है, या सरणी या संदर्भ में पूरी श्रृंखला या उस प्रकृति में से कुछ है? , इसके अलावा
print NEWFILE join(",", map { $worksheet->{Cells}[$row][$_] } 0 .. $maxCol), "\n";
करें कि आप अपने अनुक्रमित सही है बनाने:
धन्यवाद
use strict;
use warnings;
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX -> new ('C:\scott.xlsm',);
my @sheets = qw(Fund_Data GL_Data);
foreach my $sheet (@sheets) {
my $worksheet = $excel->Worksheet($sheet);
my $cell = $worksheet->get_cell(25,0);
if ($cell) { # make sure cell value isn't blank
my $myFile = "C:/$sheet.csv";
open NEWFILE, ">$myFile" or die $!;
# write all cells from Range("A25:[MaxColumn][MaxRow]") to a csv file
my $maxCol = $worksheet->{MaxCol};
my $maxRow = $worksheet->{MaxRow};
my @arrRows;
my $rowString;
# loop through each row and column in defined range and string together each row and write to file
foreach my $row (24 .. $maxRow) {
foreach my $col (0 .. $maxCol) {
my $cellValue = $worksheet->{Cells} [$row] [$col]->Value();
if ($rowString) {
$rowString = $rowString . "," . $cellValue;
} else {
$rowString = $cellValue;
}
}
print NEWFILE "$rowString\n";
undef $rowString;
}
}
}
बीटीडब्ल्यू, आपका कोड पहले से ही एक गैर-विशेषज्ञ के लिए बहुत अच्छा है! ऐसी चीजें हैं जो आप इसे अधिक मूर्खतापूर्ण बनाने के लिए कर सकते हैं (उत्तरों को देखें), लेकिन यह एक उत्कृष्ट शुरुआत है! प्रोत्साहन के लिए – DVK
@DVK +1। धन्यवाद। जानना अच्छा है कि मैं अच्छी शुरूआत में हूं। –
चूंकि यह वास्तविक सवाल नहीं है, इसलिए आईएमएचओ यह http://codereview.stackexchange.com/ – dgw