PHP में एक एक्सेल फाइल पढ़ना [बंद]


97

मैं एक एक्सेल फाइल (ऑफिस 2003) पढ़ने की कोशिश कर रहा हूं। एक एक्सेल फ़ाइल है जिसे अपलोड करने की आवश्यकता है और इसकी सामग्री पार्स हो गई है।

Google के माध्यम से, मैं केवल इन संबंधित (और अपर्याप्त विषयों) के जवाब पा सकता हूं: एक्सेल फाइलें पैदा करना, एक्सेल एक्सएमएल फाइलें पढ़ना, एक्सेल सीएसवी फाइलें पढ़ना, या अधूरी छोड़ी गई परियोजनाएं। मेरा स्वयं का ऑफिस 2003 है, इसलिए अगर मुझे वहां से किसी भी फाइल की आवश्यकता है, तो वे उपलब्ध हैं। यह मेरे बॉक्स पर स्थापित है, लेकिन मेरे साझा होस्ट पर स्थापित नहीं किया जा सकता है और न ही किया जा सकता है।

संपादित करें: अब तक सभी उत्तर PHP-ExcelReader और / या इस अतिरिक्त लेख को इंगित करते हैं कि इसका उपयोग कैसे करें।



3
एडिट पर दो लिंक टूटे हुए हैं!
होउरी

में एक अद्यतन PhpSpreadsheet बस के रूप में github.com/PHPOffice/PhpSpreadsheet यह अब के लिए इस्तेमाल किया पुस्तकालय है
jogarcia

जवाबों:


52

मैं xls फाइल पढ़ने के लिए PHP-ExcelReader का उपयोग करता हूं , और बढ़िया काम करता हूं ।


6
यह मेरे लिए काम नहीं कर रहा है, मेरे पास 5.2+ है, मुझे त्रुटि दें "संदर्भ द्वारा नए के रिटर्न मान को पदावनत किया जाए"
हार्दिक रावल

यहाँ @ @Raval, क्या तुमने बाद में इसके लिए कोई समाधान खोजा ??
असलमदोक्टर

6
हे दोस्तों, मैंने हाल ही के PHP 5 संस्करणों के साथ इसे संगत बनाने के लिए कुछ चीजें तय कीं : pastebin.com/YNUZANcs सभी क्रेडिट मूल डेवलपर्स के पास जाते हैं।
लार्स सिरप ब्रिंक नील्सन सेप

संदर्भ द्वारा नए का रिटर्न मान निर्दिष्ट किया गया है "
BARIS KURT

4
जैसा कि मैं इसे समझता हूं, PHP-ExcelReader एक वर्ग है जो .xls-files को संभाल सकता है, लेकिन .xlsx फ़ाइलों को नहीं। PHPExcel कई अलग-अलग स्वरूपों (.xls और .xlsx सहित) ( github.com/PHPOffice/Phpexcel ) को संभाल सकता है और स्थिर संस्करण में है। PHPSpreadsheet PHPExcel का एक और विकास है, लेकिन स्थिर नहीं है (जैसा कि मैं यह लिख रहा हूं): github.com/PHPOffice/PhpSpreadsheet
bestprogrammerintheworld

60

जहाँ तक मुझे पता है आपके पास 2 विकल्प हैं:

  1. स्प्रैडशीट_Excel_Reader , जो Office 2003 बाइनरी प्रारूप को जानता है
  2. PHPExcel , जो Office 2003 और Excel 2007 (XML) दोनों को जानता है। (लिंक का पालन करें, और आप देखेंगे कि उन्होंने इस लाइब्रेरी को PHPSpreadSheet में अपग्रेड किया है )

PHPExcel Office 2003 प्रारूप के लिए स्प्रेडशीट_Excel_Reader का उपयोग करता है।

अद्यतन: मुझे एक बार कुछ एक्सेल फाइलें पढ़नी थीं लेकिन मैंने उन्हें पढ़ने के लिए Office 2003 XML प्रारूप का उपयोग किया और उन लोगों को बताया जो केवल उस प्रकार की एक्सेल फाइल को बचाने और अपलोड करने के लिए एप्लिकेशन का उपयोग कर रहे थे।


@NTulip: मुझे यह देखने के लिए फ़ीचर सूचियों या दस्तावेज़ों में कुछ भी नहीं दिख रहा है कि वे एक्सेल फ़ाइलों से पढ़ सकें। कोई उदाहरण?
दिनाह

@ दीना, तुम सही कह रहे हो। मैंने अपनी प्रतिक्रिया में उचित बदलाव किए।
इओनु 9 जी। स्टेन

4
PHPExcel हमेशा स्प्रेडशीट प्रारूपों की एक श्रृंखला को पढ़ने और लिखने में सक्षम रहा है। होम पेज की पहली गैर-हेडिंग लाइन से उद्धृत: "PHP प्रोग्रामिंग भाषा के लिए कक्षाओं का एक सेट प्रदान करने वाली परियोजना, जो आपको एक्सेल 2007, पीडीएफ, एचटीएमएल जैसे विभिन्न फ़ाइल स्वरूपों से लिखने और पढ़ने की अनुमति देती है " (मेरा जोर )
मार्क बेकर

20

यह इस बात पर निर्भर करता है कि आप एक्सेल फ़ाइल में डेटा का उपयोग कैसे करना चाहते हैं। यदि आप इसे mysql में आयात करना चाहते हैं, तो आप बस इसे CSV स्वरूपित फ़ाइल के रूप में सहेज सकते हैं और फिर इसे पार्स करने के लिए fgetcsv का उपयोग कर सकते हैं।


15

XLSX (एक्सेल 97-2003) https://github.com/shuchkin/simplexls पढ़ें

if ( $xls = SimpleXLS::parse('book.xls') ) {
    print_r( $xls->rows() );
} else {
    echo SimpleXLS::parseError();
}

XLSX (Excel 2003+) https://github.com/shuchkin/simplexlsx पढ़ें

if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) {
    print_r( $xlsx->rows() );
} else {
    echo SimpleXLSX::parseError();
}

उत्पादन

ऐरे (
    [०] => ऐरे
        (
            [०] => आईएसबीएन
            [१] => शीर्षक
            [२] => लेखक
            [३] => प्रकाशक
            [४] => ctry
        )
    [१] => ऐरे
        (
            [०] => २६ 0२६०३०
            [१] => द हॉबिट
            [२] => जेआरआर टोल्किन
            [३] => ह्यूटन मिफ्लिन
            [४] => यूएसए
       )

)

CSV php रीडर
https://github.com/shuchkin/simplecsv


4

इसे इस्तेमाल करे...

मैंने "xls और xlsx" पढ़ने के लिए निम्नलिखित कोड का उपयोग किया है

    <?php
    include 'excel_reader.php';       // include the class
    $excel = new PhpExcelReader;      // creates object instance of the class
    $excel->read('excel_file.xls');   // reads and stores the excel file data

    // Test to see the excel data stored in $sheets property
    echo '<pre>';
    var_export($excel->sheets);

    echo '</pre>';

    or 

 echo '<pre>';
    print_r($excel->sheets);

    echo '</pre>';

संदर्भ: http://coursesweb.net/php-mysql/read-excel-file-data-npppc


यह फारसी भाषा को नहीं पहचानता
मोहम्मदहोसिन आर

@deenandhayalan क्या मुझे excel_reader.php लाइब्रेरी मिल सकती है?
आशा

4
// Here is the simple code using COM object in PHP
class Excel_ReadWrite{

    private $XLSHandle;
    private $WrkBksHandle;
    private $xlBook;

    function __construct() {
        $this->XLSHandle = new COM("excel.application") or die("ERROR: Unable to instantaniate COM!\r\n"); 
    }

    function __destruct(){
        //if already existing file is opened
        if($this->WrkBksHandle != null)
        {   
            $this->WrkBksHandle->Close(True);
            unset($this->WrkBksHandle);
            $this->XLSHandle->Workbooks->Close();
        }
        //if created new xls file
        if($this->xlBook != null)
        {
            $this->xlBook->Close(True);
            unset($this->xlBook);
        }
        //Quit Excel Application
        $this->XLSHandle->Quit();
        unset($this->XLSHandle);
    }

    public function OpenFile($FilePath)
    {
        $this->WrkBksHandle = $this->XLSHandle->Workbooks->Open($FilePath);
    }

    public function ReadData($RowNo, $ClmNo)
    {
       $Value = $this->XLSHandle->ActiveSheet->Cells($RowNo, $ClmNo)->Value;
       return $Value;
    }  

    public function SaveOpenedFile()
    {
        $this->WrkBksHandle->Save(); 
    }  

    /***********************************************************************************
    * Function Name:- WriteToXlsFile() will write data based on row and column numbers
    * @Param:- $CellData- cell data
    * @Param:- $RowNumber- xlsx file row number
    * @Param:- $ColumnNumber- xlsx file column numbers
   ************************************************************************************/
   function WriteToXlsFile($CellData, $RowNumber, $ColumnNumber)
   {
       try{
               $this->XLSHandle->ActiveSheet->Cells($RowNumber,$ColumnNumber)->Value = $CellData;
           }
       catch(Exception $e){
               throw new Exception("Error:- Unable to write data to xlsx sheet");
           }
   }


   /****************************************************************************************
    * Function Name:- CreateXlsFileWithClmName() will initialize xls file with column Names
    * @Param:- $XlsColumnNames- Array of columns data
    * @Param:- $XlsColumnWidth- Array of columns width
   *******************************************************************************************/
   function CreateXlsFileWithClmNameAndWidth($WorkSheetName = "Raman", $XlsColumnNames = null, $XlsColumnWidth = null)
   {
       //Hide MS Excel application window
       $this->XLSHandle->Visible = 0;
       //Create new document
       $this->xlBook = $this->XLSHandle->Workbooks->Add();

       //Create Sheet 1
       $this->xlBook->Worksheets(1)->Name = $WorkSheetName;
       $this->xlBook->Worksheets(1)->Select;

       if($XlsColumnWidth != null)
       {
           //$XlsColumnWidth = array("A1"=>15,"B1"=>20);
           foreach($XlsColumnWidth as $Clm=>$Width)
           {
               //Set Columns Width
               $this->XLSHandle->ActiveSheet->Range($Clm.":".$Clm)->ColumnWidth = $Width;
           }    
       }
       if($XlsColumnNames != null)
       {
           //$XlsColumnNames = array("FirstColumnName"=>1, "SecondColumnName"=>2);
           foreach($XlsColumnNames as $ClmName=>$ClmNumber)
           {
               // Cells(Row,Column)
               $this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Value = $ClmName;
               $this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Font->Bold = True;
               $this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Interior->ColorIndex = "15";
           }
       }
   }
   //56 is for xls 8
    public function SaveCreatedFile($FileName, $FileFormat = 56)
    {
        $this->xlBook->SaveAs($FileName, $FileFormat);
    }

    public function MakeFileVisible()
    {
       //Hide MS Excel application window`enter code here`
       $this->XLSHandle->Visible = 1;
    }
}//end of EXCEL class

2
यह अच्छा लगता है यदि आपका PHP सर्वर विंडोज और एक्सेल पर चल रहा है।
मार्टिन बर्च

2

मैं नीचे एक्सेल फ़ाइल url का उपयोग कर रहा हूं: https://github.com/inventorbala/Sample-Excel-files/blob/master/sample-excel-files.xlsx

आउटपुट:

Array
    (
        [0] => Array
            (
                [store_id] => 3716
                [employee_uid] => 664368
                [opus_id] => zh901j
                [item_description] => PRE ATT $75 PNLS 90EXP
                [opus_transaction_date] => 2019-10-18
                [opus_transaction_num] => X2MBV1DJKSLQW
                [opus_invoice_num] => O3716IN3409
                [customer_name] => BILL PHILLIPS
                [mobile_num] => 4052380136
                [opus_amount] => 75
                [rq4_amount] => 0
                [difference] => -75
                [ocomment] => Re-Upload: We need RQ4 transaction for October.  If you're unable to provide the October invoice, it will be counted as EPin shortage.
                [mark_delete] => 0
                [upload_date] => 2019-10-20
            )

        [1] => Array
            (
                [store_id] => 2710
                [employee_uid] => 75899
                [opus_id] => dc288t
                [item_description] => PRE ATT $50 PNLS 90EXP
                [opus_transaction_date] => 2019-10-18
                [opus_transaction_num] => XJ90419JKT9R9
                [opus_invoice_num] => M2710IN868
                [customer_name] => CALEB MENDEZ
                [mobile_num] => 6517672079
                [opus_amount] => 50
                [rq4_amount] => 0
                [difference] => -50
                [ocomment] => No Response.  Re-Upload
                [mark_delete] => 0
                [upload_date] => 2019-10-20
            )

        [2] => Array
            (
                [store_id] => 0136
                [employee_uid] => 70167
                [opus_id] => fv766x
                [item_description] => PRE ATT $50 PNLS 90EXP
                [opus_transaction_date] => 2019-10-18
                [opus_transaction_num] => XQ57316JKST1V
                [opus_invoice_num] => GONZABP25622
                [customer_name] => FAUSTINA CASTILLO
                [mobile_num] => 8302638628
                [opus_amount] => 100
                [rq4_amount] => 50
                [difference] => -50
                [ocomment] => Re-Upload: We have been charged in opus for $100. Provide RQ4 invoice number for remaining amount
                [mark_delete] => 0
                [upload_date] => 2019-10-20
            )

        [3] => Array
            (
                [store_id] => 3264
                [employee_uid] => 23723
                [opus_id] => aa297h
                [item_description] => PRE ATT $25 PNLS 90EXP
                [opus_transaction_date] => 2019-10-19
                [opus_transaction_num] => XR1181HJKW9MP
                [opus_invoice_num] => C3264IN1588
                [customer_name] => SOPHAT VANN
                [mobile_num] => 9494668372
                [opus_amount] => 70
                [rq4_amount] => 25
                [difference] => -45
                [ocomment] => No Response.  Re-Upload
                [mark_delete] => 0
                [upload_date] => 2019-10-20
            )

        [4] => Array
            (
                [store_id] => 4166
                [employee_uid] => 568494
                [opus_id] => ab7598
                [item_description] => PRE ATT $40 RTR
                [opus_transaction_date] => 2019-10-20
                [opus_transaction_num] => X8F58P3JL2RFU
                [opus_invoice_num] => I4166IN2481
                [customer_name] => KELLY MC GUIRE
                [mobile_num] => 6189468180
                [opus_amount] => 40
                [rq4_amount] => 0
                [difference] => -40
                [ocomment] => Re-Upload: The invoice number that you provided (I4166IN2481) belongs to September transaction.  We need RQ4 transaction for October.  If you're unable to provide the October invoice, it will be counted as EPin shortage.
                [mark_delete] => 0
                [upload_date] => 2019-10-21
            )

        [5] => Array
            (
                [store_id] => 4508
                [employee_uid] => 552502
                [opus_id] => ec850x
                [item_description] => $30 RTR
                [opus_transaction_date] => 2019-10-20
                [opus_transaction_num] => XPL7M1BJL1W5D
                [opus_invoice_num] => M4508IN6024
                [customer_name] => PREPAID CUSTOMER
                [mobile_num] => 6019109730
                [opus_amount] => 30
                [rq4_amount] => 0
                [difference] => -30
                [ocomment] => Re-Upload: The invoice number you provided (M4508IN7217) belongs to a different phone number.  We need RQ4 transaction for the phone number in question.  If you're unable to provide the RQ4 invoice for this transaction, it will be counted as EPin shortage.
                [mark_delete] => 0
                [upload_date] => 2019-10-21
            )

        [6] => Array
            (
                [store_id] => 3904
                [employee_uid] => 35818
                [opus_id] => tj539j
                [item_description] => PRE $45 PAYG PINLESS REFILL
                [opus_transaction_date] => 2019-10-20
                [opus_transaction_num] => XM1PZQSJL215F
                [opus_invoice_num] => N3904IN1410
                [customer_name] => DORTHY JONES
                [mobile_num] => 3365982631
                [opus_amount] => 90
                [rq4_amount] => 45
                [difference] => -45
                [ocomment] => Re-Upload: Please email the details to Treasury and confirm
                [mark_delete] => 0
                [upload_date] => 2019-10-21
            )

        [7] => Array
            (
                [store_id] => 1820
                [employee_uid] => 59883
                [opus_id] => cb9406
                [item_description] => PRE ATT $25 PNLS 90EXP
                [opus_transaction_date] => 2019-10-20
                [opus_transaction_num] => XTBJO14JL25OE
                [opus_invoice_num] => SEVIEIN19013
                [customer_name] => RON NELSON
                [mobile_num] => 8653821076
                [opus_amount] => 25
                [rq4_amount] => 5
                [difference] => -20
                [ocomment] => Re-Upload: We have been charged in opus for $25. Provide RQ4 invoice number for remaining amount
                [mark_delete] => 0
                [upload_date] => 2019-10-21
            )

        [8] => Array
            (
                [store_id] => 0178
                [employee_uid] => 572547
                [opus_id] => ms5674
                [item_description] => PRE $45 PAYG PINLESS REFILL
                [opus_transaction_date] => 2019-10-21
                [opus_transaction_num] => XT29916JL4S69
                [opus_invoice_num] => T0178BP1590
                [customer_name] => GABRIEL LONGORIA JR
                [mobile_num] => 4322133450
                [opus_amount] => 45
                [rq4_amount] => 0
                [difference] => -45
                [ocomment] => Re-Upload: Please email the details to Treasury and confirm
                [mark_delete] => 0
                [upload_date] => 2019-10-22
            )

        [9] => Array
            (
                [store_id] => 2180
                [employee_uid] => 7842
                [opus_id] => lm854y
                [item_description] => $30 RTR
                [opus_transaction_date] => 2019-10-21
                [opus_transaction_num] => XC9U712JL4LA4
                [opus_invoice_num] => KETERIN1836
                [customer_name] => PETE JABLONSKI
                [mobile_num] => 9374092680
                [opus_amount] => 30
                [rq4_amount] => 40
                [difference] => 10
                [ocomment] => Re-Upload: Credit the remaining balance to customers account in OPUS and email confirmation to Treasury
                [mark_delete] => 0
                [upload_date] => 2019-10-22
            )


      .
      .
      .
 [63] => Array
            (
                [store_id] => 0175
                [employee_uid] => 33738
                [opus_id] => ph5953
                [item_description] => PRE ATT $40 RTR
                [opus_transaction_date] => 2019-10-21
                [opus_transaction_num] => XE5N31DJL51RA
                [opus_invoice_num] => T0175IN4563
                [customer_name] => WILLIE TAYLOR
                [mobile_num] => 6822701188
                [opus_amount] => 40
                [rq4_amount] => 50
                [difference] => 10
                [ocomment] => Re-Upload: Credit the remaining balance to customers account in OPUS and email confirmation to Treasury
                [mark_delete] => 0
                [upload_date] => 2019-10-22
            ) 

    )

0

मैंने "xls और xlsx" पढ़ने के लिए निम्नलिखित कोड का उपयोग किया है:

    include 'PHPExcel/IOFactory.php';

    $location='sample-excel-files.xlsx';

    $objPHPExcel = PHPExcel_IOFactory::load($location);
    $sheet = $objPHPExcel->getSheet(0);
    $total_rows = $sheet->getHighestRow();
    $total_columns = $sheet->getHighestColumn();
    $set_excel_query_all=array();
    for($row =2; $row <= $total_rows; $row++) {
        $singlerow = $sheet->rangeToArray('A' . $row . ':' . $total_columns . $row, NULL, TRUE, FALSE);
        $single_row=$singlerow[0];
        $set_excel_query['store_id']=$single_row[0];
        $set_excel_query['employee_uid']=$single_row[1];
        $set_excel_query['opus_id']=$single_row[2];
        $set_excel_query['item_description']=$single_row[3];
        if($single_row[4])
        {
            $set_excel_query['opus_transaction_date']= date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($single_row[4]));
        }
        $set_excel_query['opus_transaction_num']=$single_row[5];
        $set_excel_query['opus_invoice_num']=$single_row[6];
        $set_excel_query['customer_name']=$single_row[7];
        $set_excel_query['mobile_num']=$single_row[8];
        $set_excel_query['opus_amount']=$single_row[9];
        $set_excel_query['rq4_amount']=$single_row[10];
        $set_excel_query['difference']=$single_row[11];
        $set_excel_query['ocomment']=$single_row[12];
        $set_excel_query['mark_delete']=$single_row[13];
        if($single_row[14])
        {
            $set_excel_query['upload_date']= date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($single_row[14]));
        }
        $set_excel_query_all[]=$set_excel_query;
    }

   print_r($set_excel_query_all); 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.