PHP - एक MySQL डेटाबेस से एक्सेल में डेटा अपलोड करना। PHP - MySQL डेटाबेस से एक्सेल में डेटा अपलोड करें एक्सेल में php टेबल अपलोड करें
.
उस नोट में प्रस्तुत विधि वास्तव में बहुत सरल है, लेकिन हमेशा सुविधाजनक नहीं हो सकती है।
PHP से एक्सेल में सारणीबद्ध डेटा स्थानांतरित करने के कई अन्य तरीके हैं, मैं उस का वर्णन करूंगा जो मुझे सबसे सरल और कार्यात्मक लग रहा था। यह विशेष रूप से ध्यान दिया जाना चाहिए कि मैं एक xls फ़ाइल बनाने के बारे में बात नहीं कर रहा हूं, लेकिन केवल यह सुझाव दे रहा हूं कि उपयोगकर्ता एक्सेल का उपयोग करके प्राप्त डेटा को खोलें ताकि जो उपयोगकर्ता प्रोग्रामिंग में अनुभवी नहीं हैं वे जालसाजी को नोटिस नहीं करेंगे।
तो, पहली बात यह है कि हमारे पृष्ठ पर एक स्क्रिप्ट का लिंक डालना है जो निम्नलिखित शीर्षलेख उत्पन्न करता है:
हेडर ("प्रगमा: पब्लिक");
हेडर ("समाप्त हो जाता है: 0");
हेडर ("कैश-कंट्रोल: जरूरी-पुनरीक्षित, पोस्ट-चेक = 0, प्री-चेक = 0");
हेडर ("कैश-कंट्रोल: प्राइवेट", गलत);
हेडर ("सामग्री-प्रकार: एप्लिकेशन / x-msexcel");
हेडर ("सामग्री-विस्थापन: अनुलग्नक; फ़ाइल नाम = \""। iconv ("UTF-8", "CP1251", $object->getFileName ())। "\";");
हेडर ("सामग्री-स्थानांतरण-एन्कोडिंग: बाइनरी");
हेडर ("सामग्री-लंबाई:"। $ ऑब्जेक्ट-> getFileSize ());
$object एक निर्वात में एक गोलाकार वस्तु है, जिसे प्रत्येक पाठक अपनी पसंद के अनुसार लागू करता है। getFileName() और getFileSize() गेटर्स का उद्देश्य नामों से स्पष्ट है। यहां यह एक गैर-स्पष्ट बारीकियों को उजागर करने के लायक है (मुझे इस बारे में याद दिलाने के लिए सेवोस्टिन के लिए धन्यवाद) - getFileName () निश्चित रूप से किसी भी फ़ाइल नाम को वापस कर सकता है, लेकिन यदि आप चाहते हैं कि ब्राउज़र एक्सेल में प्राप्त सामग्री को खोलने की पेशकश करे, तो फ़ाइल एक्सटेंशन xls होना चाहिए।
मैंने अभी तक कुछ भी नया नहीं बताया है, यह सब मेरे सामने आविष्कार किया गया था, हालांकि, साथ ही साथ जो नीचे वर्णित किया जाएगा।
जैसा कि PHP में xls जनरेट करने के बारे में पोस्ट की टिप्पणियों में ठीक ही बताया गया है, XML के साथ एक्सेल बहुत तेज है। लेकिन सबसे महत्वपूर्ण लाभ, शायद, अभी भी गति में नहीं है, लेकिन बहुत व्यापक संभावनाओं में है। मैं जंगल में नहीं जाऊंगा, लेकिन केवल एक साधारण उदाहरण दूंगा, और सभी टैगों के विस्तृत विवरण के लिए एक लिंक दूंगा।
इसलिए, हेडर उत्पन्न होने के बाद, हमें उपयोगकर्ता को वास्तविक डेटा देना होगा। मैं आमतौर पर टेबल पीढ़ी को एक अलग विधि में लपेटता हूं:
इको $ ऑब्जेक्ट-> getContent ();
और मैं Smarty का उपयोग करके तालिका उत्पन्न करता हूं:
जैसा कि आप कोड से देख सकते हैं, $data सरणी जिसमें दो सरणियाँ हैं, टेम्पलेट - टेबल हेडर लाइन और वास्तविक डेटा को पास किया जाता है।
यह ध्यान देने योग्य है कि केवल एक्सएमएल उत्पन्न करने के लिए टेम्पलेट इंजन का उपयोग करना कुछ महंगा है, और एक्सएमएल प्राप्त करने के कई अन्य तरीके हैं। मेरे विशेष मामले में, एक्सएमएल पीढ़ी एक बड़ी परियोजना में एक छोटा सा बोनस है जहां एक टेम्पलेट इंजन अनिवार्य है।
एक उदाहरण के रूप में, मैंने सबसे सरल तालिका दी, यदि वांछित है, तो आप बहुत बड़ी संख्या में विशेषताओं में हेरफेर कर सकते हैं। यह विशेष रूप से अच्छा है जब आप समझते हैं कि कार्यान्वयन के लिए किसी तीसरे पक्ष के पुस्तकालयों की आवश्यकता नहीं है।
वर्णित विधि कई वर्षों से एक ही परियोजना पर काम कर रही है, और एक भी उपयोगकर्ता को अभी तक यह संदेह नहीं हुआ है कि वह जो डेटा खोलता है वह एमएस ऑफिस दस्तावेज़ नहीं है।
आप एमएस एक्सेल में प्रयुक्त एक्सएमएल संरचना के बारे में अधिक पढ़ सकते हैं
.
उस नोट में प्रस्तुत विधि वास्तव में बहुत सरल है, लेकिन हमेशा सुविधाजनक नहीं हो सकती है।
PHP से एक्सेल में सारणीबद्ध डेटा स्थानांतरित करने के कई अन्य तरीके हैं, मैं उस का वर्णन करूंगा जो मुझे सबसे सरल और कार्यात्मक लग रहा था। यह विशेष रूप से ध्यान दिया जाना चाहिए कि मैं एक xls फ़ाइल बनाने के बारे में बात नहीं कर रहा हूं, लेकिन केवल यह सुझाव दे रहा हूं कि उपयोगकर्ता एक्सेल का उपयोग करके प्राप्त डेटा को खोलें ताकि जो उपयोगकर्ता प्रोग्रामिंग में अनुभवी नहीं हैं वे जालसाजी को नोटिस नहीं करेंगे।
तो, पहली बात यह है कि हमारे पृष्ठ पर एक स्क्रिप्ट का लिंक डालना है जो निम्नलिखित शीर्षलेख उत्पन्न करता है:
हेडर ("प्रगमा: पब्लिक");
हेडर ("समाप्त हो जाता है: 0");
हेडर ("कैश-कंट्रोल: जरूरी-पुनरीक्षित, पोस्ट-चेक = 0, प्री-चेक = 0");
हेडर ("कैश-कंट्रोल: प्राइवेट", गलत);
हेडर ("सामग्री-प्रकार: एप्लिकेशन / x-msexcel");
हेडर ("सामग्री-विस्थापन: अनुलग्नक; फ़ाइल नाम = \""। iconv ("UTF-8", "CP1251", $object->getFileName ())। "\";");
हेडर ("सामग्री-स्थानांतरण-एन्कोडिंग: बाइनरी");
हेडर ("सामग्री-लंबाई:"। $ ऑब्जेक्ट-> getFileSize ());
$object एक निर्वात में एक गोलाकार वस्तु है, जिसे प्रत्येक पाठक अपनी पसंद के अनुसार लागू करता है। getFileName() और getFileSize() गेटर्स का उद्देश्य नामों से स्पष्ट है। यहां यह एक गैर-स्पष्ट बारीकियों को उजागर करने के लायक है (मुझे इसके बारे में याद दिलाने के लिए धन्यवाद) - getFileName () निश्चित रूप से किसी भी फ़ाइल नाम को वापस कर सकता है, लेकिन यदि आप चाहते हैं कि ब्राउज़र एक्सेल में प्राप्त सामग्री को खोलने की पेशकश करे, तो फ़ाइल एक्सटेंशन एक्सएलएस होना चाहिए।
मैंने अभी तक कुछ भी नया नहीं बताया है, यह सब मेरे सामने आविष्कार किया गया था, हालांकि, साथ ही साथ जो नीचे वर्णित किया जाएगा।
जैसा कि नोट पर टिप्पणियों में ठीक ही नोट किया गया था, एक्सेल एक्सएमएल के साथ बहुत तेजी से काम करता है। लेकिन सबसे महत्वपूर्ण लाभ, शायद, अभी भी गति में नहीं है, लेकिन बहुत व्यापक संभावनाओं में है। मैं जंगल में नहीं जाऊंगा, लेकिन केवल एक साधारण उदाहरण दूंगा, और सभी टैगों के विस्तृत विवरण के लिए एक लिंक दूंगा।
इसलिए, हेडर उत्पन्न होने के बाद, हमें उपयोगकर्ता को वास्तविक डेटा देना होगा। मैं आमतौर पर टेबल पीढ़ी को एक अलग विधि में लपेटता हूं:
इको $ ऑब्जेक्ट-> getContent ();
और मैं Smarty का उपयोग करके तालिका उत्पन्न करता हूं:
जैसा कि आप कोड से देख सकते हैं, $data सरणी जिसमें दो सरणियाँ हैं, टेम्पलेट - टेबल हेडर लाइन और वास्तविक डेटा को पास किया जाता है।
यह ध्यान देने योग्य है कि केवल एक्सएमएल उत्पन्न करने के लिए टेम्पलेट इंजन का उपयोग करना कुछ महंगा है, और एक्सएमएल प्राप्त करने के कई अन्य तरीके हैं। मेरे विशेष मामले में, एक्सएमएल पीढ़ी एक बड़ी परियोजना में एक छोटा सा बोनस है जहां एक टेम्पलेट इंजन अनिवार्य है।
एक उदाहरण के रूप में, मैंने सबसे सरल तालिका दी, यदि वांछित है, तो आप बहुत बड़ी संख्या में विशेषताओं में हेरफेर कर सकते हैं। यह विशेष रूप से अच्छा है जब आप समझते हैं कि कार्यान्वयन के लिए किसी तीसरे पक्ष के पुस्तकालयों की आवश्यकता नहीं है।
वर्णित विधि कई वर्षों से एक ही परियोजना पर काम कर रही है, और एक भी उपयोगकर्ता को अभी तक यह संदेह नहीं हुआ है कि वह जो डेटा खोलता है वह एमएस ऑफिस दस्तावेज़ नहीं है।
आप एमएस एक्सेल में प्रयुक्त एक्सएमएल संरचना के बारे में अधिक पढ़ सकते हैं
कई लोगों के लिए, के साथ काम करते समय MySQL के साथ संयोजन में PHPडेटाबेस से एक्सएलएस प्रारूप में डेटा निर्यात करने जैसी आवश्यकता है, ताकि जिन लोगों को इस डेटा की आवश्यकता है वे इसे एक्सेल में संसाधित करें या उपयोगकर्ताओं के लिए इस डेटा को देखने के लिए इसे सुविधाजनक बनाएं। हाल ही में मुझे ऐसी जरूरत पड़ी और आज मैं आपको बताऊंगा कि इस बिजनेस को कैसे लागू किया जा सकता है।
मुझे तुरंत कहना होगा कि यह विधि काफी सरल है, लेकिन डेटा सामान्य रूप से अपलोड किया जाता है।
शुरू करने के लिए, मैं अंतिम xls फ़ाइल का एक उदाहरण दूंगा, एक्सेल में अपलोड कुछ इस तरह दिखेगा:
दूसरे शब्दों में, कोई चित्र या शैली अपलोड नहीं की जाएगी, केवल कॉलम हेडर और डेटा ही।
इससे पहले कि मैं इस तरह के एक अपलोड विकल्प पर आता, मैंने सीएसवी प्रारूप में अपलोड करने की कोशिश की, लेकिन यह थोड़ा अनाड़ी निकला, फिर मैंने एक टेबल खींचने और इसे एक्सएलएस एक्सटेंशन के साथ सहेजने की कोशिश की, यह भी किसी तरह की बकवास निकला, अब मैं जिस विधि का वर्णन करूंगा वह मेरे लिए बिल्कुल उपयुक्त है और अब मैं इसे आपके साथ साझा करूंगा।
शुरू करने के लिए, मैं जितना संभव हो सके सभी कोड दूंगा, आप इसे चुन सकते हैं और इसे PHP एक्सटेंशन के साथ सहेज सकते हैं और इसे आजमा सकते हैं, बस डेटाबेस कनेक्शन सेटिंग्स सेट करना न भूलें।
PHP में MySQL से एक्सेल में डेटा निर्यात करें
और ताकि आप समझ सकें कि मैं कौन सा डेटा अनलोड करता हूं, मैं डेटाबेस में एक साधारण तालिका का उदाहरण दूंगा ( मेरे पास उसका नाम परीक्षण है):
टेस्ट टेबल:
पहचान | संतोष | नाम |
1 | इवानोव | इवान |
2 | पेत्रोव | पीटर |
2 | पेट्रोव2 | पेट्र2 |
यहाँ पूरा विचार समारोह में है सामान बाँधना(), जो डेटा को एक बाइनरी स्ट्रिंग में पैक करता है, और बदले में, हम इस स्ट्रिंग को क्रमिक रूप से उस डेटा से भरते हैं जिसे हमने डेटाबेस से अनलोड किया था माई एसक्यूएल सामान्य फ़ंक्शन का उपयोग करना mysql_query ().
इस कोड के प्रदर्शन की जांच करने के लिए, यह देखते हुए कि आपने डेटाबेस से कनेक्शन स्थापित किया है और एक समान तालिका बनाई है, आप निम्नलिखित अनुरोध भेज सकते हैं:
एचटीपी://your_site/file_name. php?id=2
और आपको दो पंक्तियों को आईडी के बराबर 2 से उतारना चाहिए।
और अब हर कोई जिसे आप डेटा अपलोड करने की अनुमति देते हैं, वेब इंटरफेस के माध्यम से इसे आसानी से अपने स्थानीय कंप्यूटर पर निर्यात कर सकते हैं। यह विधि कॉर्पोरेट उपयोगकर्ताओं के लिए सुविधाजनक है, यदि आप अपने संगठन के लिए और इंटरनेट पर अपनी वेब साइट के उपयोगकर्ताओं के लिए एक एप्लिकेशन विकसित कर रहे हैं। मुझे उम्मीद है कि इस विधि ने आपकी मदद की है। आपको कामयाबी मिले!
(डेटा mysql डेटाबेस से पुनर्प्राप्त) सफल होने के लिए। मैं ज़ेंड फ्रेमवर्क का उपयोग कर रहा हूं। एक्सेल में एक्सपोर्ट करने से पहले मुझे अपने डेटा में कुछ बदलाव करने होंगे। वास्तव में, मुझे वास्तव में एक मासिक रोकड़ बही बनाने की आवश्यकता है।
मैंने बहुत सारे दस्तावेज़ पढ़े हैं लेकिन एक गड़बड़ी में समाप्त हो गया। मैं वास्तव में समझ नहीं पा रहा हूं कि कैसे शुरू किया जाए। क्या मुझे वास्तव में नाशपाती की आवश्यकता है? क्या मुझे कोई कक्षा पुस्तकालय लोड करने की ज़रूरत है? क्या ऐसा करने का कोई आसान तरीका नहीं है?
अग्रिम में धन्यवाद
मेरा सुझाव है कि आप PHPExcel लाइब्रेरी PHPExcel का उपयोग करें। यह वास्तव में शक्तिशाली है, विभिन्न स्वरूपों का समर्थन करता है, दृश्य स्वरूपण कर सकता है, और उपयोग में आसान है।
आप इसके बारे में उनके वेबपेज: http://phpexcel.codeplex.com/ पर अधिक जान सकते हैं। (PHPExcel पहले ही https://github.com/PHPOffice/PHPExcel में स्थानांतरित हो चुका है)
उपयोग उदाहरण:
$objPHPExcel = नया PHPExcel (); /** आप अनेक गुण सेट कर सकते हैं ") -> सेट डिस्क्रिप्शन ("जॉन डो द्वारा वार्षिक बिक्री रिपोर्ट") -> सेट श्रेणी ("वित्त"); /** शीट्स में से एक चुनें */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0); /** बस सेल का मान सेट करें */ $activeSheet->setCellValue("A1", "बहुवचन");
बेशक, आप बहुत कुछ कर सकते हैं, बेशक, एक्सेल फाइलें पढ़ना, विजुअल स्टाइल सेट करना, ग्राफ बनाना, एक्सप्रेशन और बहुत कुछ।
मैंने एक 94 पंक्ति सूची भिन्नता रिपोर्ट लिखी है जहां मैं MySQL से डेटा लेता हूं (6kb + प्रति तालिका रिकॉर्ड), MySQL डेटा से एक बहुआयामी सरणी बनाएं, एकाधिक तालिकाओं से खींचें, फिर सब कुछ एक पंक्ति में डंप करें और इस प्रकार एक .xls उत्पन्न करें:
कोई एक्सटेंशन की आवश्यकता नहीं है।
केवल चेतावनी यह है कि मुझे अभी तक पता नहीं चला है कि एक्सेल के बिना .xls को कैसे थूकना है, आपको बता रहा है कि डेटा दूषित हो सकता है - और मैंने डेटा को "निर्यात" करने की तुलना में स्वरूपण या कुछ और जटिल करने की कोशिश नहीं की है , फ़ाइल/डेटा ठीक है, लेकिन यह एक्सेल से एक चेतावनी उत्पन्न करता है।
संपादित करें: मुझे ध्यान रखना चाहिए कि "सेटअप" और "डंप" का संदर्भ लें: daniweb.com
आप phpexcel लाइब्रेरी का उपयोग कर सकते हैं। यह आपको विभिन्न स्प्रेडशीट फ़ाइल स्वरूपों से लिखने और पढ़ने की अनुमति देता है
ज़ेंड के साथ एकीकृत करने के लिए आप निम्न लिंक की सहायता का उपयोग कर सकते हैं।
एक्सेल के लिए आयात योग्य प्रारूप बनाने के लिए आप सीएसवी का उपयोग कर सकते हैं। इसे करने का यह सबसे आसान तरीका है।
सीएसवी इस तरह दिखता है:
"मेरी पहली सेल सामग्री", "मेरी दूसरी सेल सामग्री", "मेरी तीसरी सेल सामग्री" "दूसरी पंक्ति, पहली सेल सामग्री", "आदि", "आदि"
प्रत्येक पंक्ति एक एक्सेल स्ट्रिंग का प्रतिनिधित्व करती है, आप सेल की सामग्री को दोहरे उद्धरण चिह्नों के बीच रखते हैं और अल्पविराम से अलग करते हैं। सावधान रहें यदि आपके पास आपका कुछ डेटा है, तो यह आपके सीएसवी को तोड़ सकता है और अवांछित न्यूलाइन्स बना सकता है।
थोड़े से Google के साथ आपको यह मिलेगा: http://www.the-art-of-web.com/php/dataexport/
डेटा तैयारी
$ डेटा = सरणी (सरणी ("प्रथम नाम" => "मैरी", "अंतिम नाम" => "जॉनसन", "आयु" => 25), सरणी ("प्रथम नाम" => "अमांडा", "अंतिम नाम" => " मिलर", "आयु" => 18), सरणी ("प्रथम नाम" => "जेम्स", "अंतिम नाम" => "भूरा", "आयु" => 31), सरणी ("पहला नाम" => "पेट्रीसिया", "अंतिम नाम" => "विलियम्स", "आयु" => 7), सरणी ("प्रथम नाम" => "माइकल", "अंतिम नाम" => "डेविस", "आयु" => 43), सरणी ("पहला नाम" => "सारा", "अंतिम नाम" => "मिलर", "आयु" => 24), सरणी ("प्रथम नाम" => "पैट्रिक", "अंतिम नाम" => "मिलर", "आयु" => 27) );
पहला कदम डेटा को टैब-सीमांकित प्रारूप में आउटपुट करना है (सीएसवी का भी उपयोग किया जा सकता है, लेकिन यह थोड़ा अधिक जटिल है)। इसके लिए हम निम्नलिखित कोड का उपयोग करते हैं:
हम सामग्री प्रकार को टेक्स्ट/सादा पर सेट करते हैं ताकि परिणाम ब्राउज़र में अधिक आसानी से देखे जा सकें। अन्यथा, चूंकि कोई HTML स्वरूपण नहीं है, आउटपुट पाठ की एक पंक्ति के रूप में प्रदर्शित किया जाएगा।
आउटपुट की पहली पंक्ति कॉलम हेडिंग होगी (इस मामले में, फ़ील्ड नामों का उपयोग किया जाता है)। मानों को टैब \t और लाइन ब्रेक वाली पंक्तियों \n द्वारा अलग किया जाता है। परिणाम कुछ इस तरह दिखना चाहिए:
प्रथम नाम अंतिम नाम मैरी जॉनसन 25 अमांडा मिलर 18 जेम्स ब्राउन 31 पेट्रीसिया विलियम्स 7 माइकल डेविस 43 सारा मिलर 24 पैट्रिक मिलर 27
इस कोड में एक कमजोरी है जो तुरंत स्पष्ट नहीं हो सकती है। क्या होगा यदि आउटपुट में से किसी एक फ़ील्ड में पहले से ही एक या अधिक टैब वर्ण हों, या इससे भी बदतर, एक नई लाइन? यह पूरी प्रक्रिया को ट्रिगर करेगा क्योंकि हम कॉलम और लाइन ब्रेक को इंगित करने के लिए इन वर्णों पर निर्भर हैं।
समाधान टैब वर्णों से "बचना" है। इस मामले में, हम टैब को शाब्दिक \t से और लाइन ब्रेक को शाब्दिक \n से बदल देंगे ताकि वे स्वरूपण को प्रभावित न करें:
अब, प्रत्येक पंक्ति के प्रतिध्वनित होने से पहले, किसी भी टैब वर्ण को "\t" से बदल दिया जाता है ताकि हमारे कॉलम टूटें नहीं। साथ ही डेटा के भीतर किसी भी लाइन ब्रेक को "\n" से बदल दिया जाता है।