मैं वेब पेज से एक्सेल में टेबल कैसे निर्यात कर सकता हूं। मैं चाहता हूं कि निर्यात में सभी स्वरूपण और रंग शामिल हों।
<td style="background-color: ...
मैं वेब पेज से एक्सेल में टेबल कैसे निर्यात कर सकता हूं। मैं चाहता हूं कि निर्यात में सभी स्वरूपण और रंग शामिल हों।
<td style="background-color: ...
जवाबों:
सुदूर और दूर, टेबल से एक्सेल में सबसे साफ, सबसे आसान निर्यात Jquery DataTables तालिका उपकरण प्लगइन है। आपको एक ग्रिड मिलता है जो आपके डेटा को सॉर्ट करता है, फ़िल्टर करता है, ऑर्डर करता है, और कोड की कुछ अतिरिक्त पंक्तियों और दो छोटी फ़ाइलों को शामिल करता है, आपको क्लिपबोर्ड और प्रिंटर पर एक्सेल, पीडीएफ, सीएसवी को निर्यात मिलता है।
यह आवश्यक है कि सभी कोड है:
$(document).ready( function () {
$('#example').dataTable( {
"sDom": 'T<"clear">lfrtip',
"oTableTools": {
"sSwfPath": "/swf/copy_cvs_xls_pdf.swf"
}
} );
} );
इसलिए, तैनाती के लिए त्वरित, कोई ब्राउज़र सीमाएं, कोई सर्वर-साइड भाषा की आवश्यकता नहीं है, और सभी को समझने में बहुत आसान है। यह एक जीत है। एक चीज जिसकी सीमा होती है, वह है, स्तंभों का सख्त स्वरूपण।
यदि स्वरूपण और रंग पूर्ण डीलब्रेकर हैं, तो केवल 100% विश्वसनीय, क्रॉस ब्राउज़र विधि जो मैंने पाया है वह आपके कोड से उचित एक्सेल फ़ाइलों को संसाधित करने के लिए सर्वर-साइड भाषा का उपयोग करना है। मेरी पसंद का समाधान PHPExcel है यह मैंने अभी तक पाया है कि सकारात्मक रूप से किसी भी ब्राउज़र से एक्सेल के एक आधुनिक संस्करण के लिए निर्यात के साथ निर्यात को संभालता है जब आप इसे HTML के अलावा कुछ भी नहीं देते हैं। मुझे स्पष्ट करें, हालांकि, यह निश्चित रूप से पहले समाधान के रूप में आसान नहीं है, और एक संसाधन हॉग का एक सा है। हालाँकि, प्लस साइड पर यह पीडीएफ के साथ-साथ डायरेक्ट भी आउटपुट कर सकता है। और, एक बार जब आप इसे कॉन्फ़िगर करते हैं, तो यह हर बार काम करता है।
अद्यतन - 15 सितंबर, 2016: टेबलटूल को " बटन " नामक एक नए प्लगइन के पक्ष में बंद कर दिया गया है। ये उपकरण पुराने टेबलटूल एक्सटेंशन के समान कार्य करते हैं, लेकिन एफएआर को स्थापित करना आसान है और वे आधुनिक ब्राउज़रों के लिए एचटीएमएल 5 डाउनलोड का उपयोग करते हैं, HTML5 मानक का समर्थन नहीं करने वाले ब्राउज़रों के लिए मूल फ़्लैश डाउनलोड में वापस आने की क्षमता के साथ। जैसा कि आप कई टिप्पणियों से देख सकते हैं क्योंकि मैंने 2011 में इस प्रतिक्रिया को पोस्ट किया था, टेबलटूल की मुख्य कमजोरी को संबोधित किया गया है। मैं अभी भी बड़ी मात्रा में डेटा को संभालने के लिए पर्याप्त रूप से डेटाटेबल्स की सिफारिश नहीं कर सकता, डेवलपर और उपयोगकर्ता दोनों के लिए।
बहुत समय पहले, मुझे पता चला कि यदि हम एक्सेल सामग्री प्रकार के साथ भेजते हैं तो एक्सेल एक टेबल के साथ एक HTML फ़ाइल खोलेगा। उपरोक्त दस्तावेज पर विचार करें:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Java Friends</title>
</head>
<body>
<table style="font-weight: bold">
<tr style="background-color:red"><td>a</td><td>b</td></tr>
<tr><td>1</td><td>2</td></tr>
</table>
</body>
</html>
मैंने उस पर निम्नलिखित बुकमार्कलेट चलाया:
javascript:window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);
और वास्तव में मुझे यह एक्सेल फाइल के रूप में डाउनलोड करने योग्य लगा। हालाँकि , मुझे अपेक्षित परिणाम नहीं मिला - फ़ाइल OpenOffice.org लेखक में खुली थी। यह मेरी समस्या है: मेरे पास इस मशीन में एक्सेल नहीं है इसलिए मैं इसे बेहतर तरीके से आज़मा नहीं सकता। इसके अलावा, इस ट्रिक ने पुराने ब्राउज़र और MS ऑफिस के एंटीक वर्जन के साथ छह साल पहले कम या ज्यादा काम किया था, इसलिए मैं वास्तव में यह नहीं कह सकता कि यह आज काम करेगा।
वैसे भी, ऊपर के दस्तावेज़ में मैंने एक बटन जोड़ा है जो संपूर्ण दस्तावेज़ को एक एक्सेल फ़ाइल के रूप में, सिद्धांत रूप में डाउनलोड करेगा:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Java Friends</title>
</head>
<body>
<table style="font-weight: bold">
<tr style="background-color:red"><td>a</td><td>b</td></tr>
<tr><td>1</td><td>2</td></tr>
<tr>
<td colspan="2">
<button onclick="window.open('data:application/vnd.ms-excel,'+document.documentElement.innerHTML);">
Get as Excel spreadsheet
</button>
</td>
</tr>
</table>
</body>
</html>
इसे एक फ़ाइल में सहेजें और बटन पर क्लिक करें। मुझे यह जानकर अच्छा लगेगा कि यह काम किया या नहीं, इसलिए मैं आपसे यह कहने के लिए भी टिप्पणी करने के लिए कहता हूं कि यह काम नहीं किया।
document.getElementById('id').innerHTML
को चुनिंदा रूप से केवल टेबल को पकड़ने के लिए कॉल करें , अन्यथा आपका सारा सामान स्प्रेडशीट को निर्यात हो जाता है। पुराने IE में काम नहीं करता है, बस शीर्षक में सभी HTML के साथ एक नई विंडो खोलता है
एक स्ट्रिंग बनाने के लिए पुराने एक्सेल 2003 एक्सएमएल प्रारूप (ओपनएक्सएमएल से पहले) का उपयोग करना संभव है जिसमें आपका वांछित एक्सएमएल है, फिर क्लाइंट पक्ष पर आप एक्सएसएल माइम प्रकार का उपयोग करके फ़ाइल को खोलने के लिए या फ़ाइल भेजने के लिए एक डेटा यूआरआई का उपयोग कर सकते हैं। एक्सेल mimetype "सामग्री-प्रकार: अनुप्रयोग / vnd.ms-excel" सर्वर साइड से क्लाइंट का उपयोग कर रहा है।
<script type="text/javascript">
var worksheet_template = '<?xml version="1.0"?><ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">'+
'<ss:Styles><ss:Style ss:ID="1"><ss:Font ss:Bold="1"/></ss:Style></ss:Styles><ss:Worksheet ss:Name="Sheet1">'+
'<ss:Table>{{ROWS}}</ss:Table></ss:Worksheet></ss:Workbook>';
var row_template = '<ss:Row ss:StyleID="1"><ss:Cell><ss:Data ss:Type="String">{{name}}</ss:Data></ss:Cell></ss:Row>';
</script>
<script type="text/javascript">
var rows = document.getElementById("my-table").getElementsByTagName('tr'),
row_data = '';
for (var i = 0, length = rows.length; i < length; ++i) {
row_data += row_template.replace('{{name}}', rows[i].getElementsByTagName('td')[0].innerHTML);
}
</script>
एक बार आपके पास जानकारी एकत्र हो जाने के बाद, अंतिम स्ट्रिंग बनाएं और डेटा URI का उपयोग करके एक नई विंडो खोलें
<script type="text/javascript"> var worksheet = worksheet_template.replace('{{ROWS}}', row_data);
window.open('data:application/vnd.ms-excel,'+worksheet); </script>
यह ध्यान देने योग्य है कि पुराने ब्राउज़र डेटा यूआरआई योजना का समर्थन नहीं करते हैं, इसलिए आपको उन ब्राउज़र के लिए फ़ाइल सर्वर साइड का उत्पादन करने की आवश्यकता हो सकती है जो इसका समर्थन नहीं करते हैं।
आपको डेटा यूआरआई सामग्री पर बेस 64 एनकोडिंग भी करने की आवश्यकता हो सकती है, जिसके लिए जेएस लाइब्रेरी की आवश्यकता हो सकती है , साथ ही स्ट्रिंग ', बेस 64' डेटा यूआरआई में माइम प्रकार के बाद।
एक्सेल में एक छोटी ज्ञात विशेषता है जिसे "वेब क्वेश्चन" कहा जाता है जो आपको अतिरिक्त प्रोग्रामिंग के बिना लगभग हर वेब पेज से डेटा पुनर्प्राप्त करने देता है।
एक वेब क्वेरी मूल रूप से एक्सेल के भीतर से HTTP अनुरोध को सीधे चलाती है और वर्कशीट में कुछ या सभी प्राप्त डेटा (और वैकल्पिक रूप से स्वरूपण) की प्रतिलिपि बनाती है।
वेब क्वेरी को परिभाषित करने के बाद आप इसे बिना किसी समय के भी छोड़ सकते हैं। इसलिए आपको डेटा को वास्तव में "निर्यात" करने की ज़रूरत नहीं है और इसे एक फ़ाइल में सहेजें - आप डेटा को डेटाबेस की तरह ही ताज़ा करेंगे।
तुम भी फिल्टर मानकों आदि के लिए एक्सेल शीघ्र होने से आप URL मापदंडों का उपयोग कर सकते हैं ...
हालाँकि मैंने अभी तक जिस पर ध्यान दिया है वह हैं:
यहाँ एक प्रश्न है कि एक्सेल में वेब क्वेरी कैसे बनाई जाए। यह एक वेब पेज से बाहरी डेटा प्राप्त करने के बारे में Microsoft मदद साइट से लिंक करता है
यह एक php है, लेकिन आप शायद इसे जावास्क्रिप्ट में बदल सकते हैं:
<?php>
$colgroup = str_repeat("<col width=86>",5);
$data = "";
$time = date("M d, y g:ia");
$excel = "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html>
<head>
<meta http-equiv=\"Content-type\" content=\"text/html;charset=utf-8\" />
<style id=\"Classeur1_16681_Styles\">
.xl4566 {
color: red;
}
</style>
</head>
<body>
<div id=\"Classeur1_16681\" align=center x:publishsource=\"Excel\">
<table x:str border=0 cellpadding=0 cellspacing=0 style=\"border-collapse: collapse\">
<colgroup>$colgroup</colgroup>
<tr><td class=xl2216681><b>Col1</b></td><td class=xl2216681><b>Col2</b></td><td class=xl2216681 ><b>Col3</b></td><td class=xl2216681 ><b>Col4</b></td><td class=xl2216681 ><b>Col5</b></td></tr>
<tr><td class=xl4566>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
</table>
</div>
</body>
</html>";
$fname = "Export".time().".xls";
$file = fopen($fname,"w+");
fwrite($file,$excel);
fclose($file);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.basename($fname).'"');
readfile($fname);
unlink($fname); ?>
सबसे पहले, मैं निर्यात करने की कोशिश नहीं करूँगा Html और आशा करता हूँ कि उपयोगकर्ता का एक्सेल इसका उदाहरण है। मेरा अनुभव है कि यह समाधान Macintosh क्लाइंट के साथ असंगति सहित समस्याओं से भरा हुआ है और उपयोगकर्ता को एक त्रुटि फेंक रहा है कि प्रश्न में फ़ाइल निर्दिष्ट प्रारूप का नहीं है। सबसे अधिक बुलेट-प्रूफ, उपयोगकर्ता के अनुकूल समाधान एक सर्वर-साइड है जहां आप एक पुस्तकालय का उपयोग करके एक वास्तविक एक्सेल फ़ाइल बनाते हैं और उपयोगकर्ता को वापस भेजते हैं। अगला सबसे अच्छा समाधान और अधिक सार्वभौमिक समाधान ओपन एक्सएमएल प्रारूप का उपयोग करना होगा। मैंने एक्सेल के पुराने संस्करणों के साथ कुछ दुर्लभ संगतता मुद्दों में भाग लिया है, लेकिन इस पर आपको एक समाधान देना चाहिए जो एक्सेल के किसी भी संस्करण पर मैक सहित काम करेगा।
मोज़िला अभी भी आधार 64 यूआरआई का समर्थन करता है। यह आपको जावास्क्रिप्ट का उपयोग करके गतिशील रूप से द्विआधारी सामग्री की रचना करने की अनुमति देता है:
<a href="data:application/vnd.ms-excel<base64 encoded binary excel content here>"> download xls</a>
यदि आपकी एक्सेल फ़ाइल बहुत फैंसी नहीं है (कोई आरेख, सूत्र, मैक्रोज़) तो आप प्रारूप में खुदाई कर सकते हैं और अपनी फ़ाइल के लिए बाइट्स बना सकते हैं, फिर उन्हें बेस 64 के साथ एनकोड करें और href में डालें
यह वास्तव में आपके द्वारा सोचने की तुलना में अधिक सरल है: क्लिपबोर्ड में "बस" एचटीएमएल टेबल (यानी: टेबल के लिए एचटीएमएल कोड) की प्रतिलिपि बनाएँ। एक्सेल को पता है कि HTML टेबल को कैसे डीकोड करना है; यह भी विशेषताओं को संरक्षित करने की कोशिश करेंगे।
जावास्क्रिप्ट से क्लिपबोर्ड तक पहुंचने का कोई मानक तरीका नहीं होने के कारण हार्ड पार्ट "क्लिपबोर्ड में तालिका की प्रतिलिपि" है। इस ब्लॉग पोस्ट को देखें: जावास्क्रिप्ट के साथ सिस्टम क्लिपबोर्ड तक पहुंच - एक पवित्र कंघी बनानेवाले की रेती?
अब आपको केवल HTML के रूप में तालिका की आवश्यकता है। मैं jQuery और html () विधि का सुझाव देता हूं ।
यह कोड केवल IE है इसलिए यह केवल उन स्थितियों में उपयोगी है, जब आप जानते हैं कि आपके सभी उपयोगकर्ता IE का उपयोग कर रहे होंगे (जैसे, उदाहरण के लिए, कुछ कॉर्पोरेट वातावरण में।)
<script Language="javascript">
function ExportHTMLTableToExcel()
{
var thisTable = document.getElementById("tbl").innerHTML;
window.clipboardData.setData("Text", thisTable);
var objExcel = new ActiveXObject ("Excel.Application");
objExcel.visible = true;
var objWorkbook = objExcel.Workbooks.Add;
var objWorksheet = objWorkbook.Worksheets(1);
objWorksheet.Paste;
}
</script>
मान्यताओं:
url दिया
रूपांतरण क्लाइंट पक्ष पर किया जाना है
सिस्टम विंडोज, मैक और लिनक्स हैं
विंडोज के लिए समाधान:
python कोड जो कि विंडो को खोलता है और उस तक पहुँच रखता है: theurl वैरिएबल में url ('http: //') होता है
ie = Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate(theurl)
नोट: यदि पृष्ठ सीधे पहुंच योग्य नहीं है, लेकिन लॉगिन करें, तो आपको प्रपत्र डेटा दर्ज करके और अजगर के साथ उपयोगकर्ता क्रियाओं का अनुकरण करके इसे संभालना होगा
यहाँ उदाहरण है
from win32com.client import Dispatch
ie.Document.all('username').value=usr
ie.Document.all('password').value=psw
वेब पेज से डेटा पुनर्प्राप्ति के लिए एक ही तरीका है। मान लीजिए कि 'el1' वाले तत्व में डेटा है। चर के लिए तत्व पाठ को पुनः प्राप्त करें
el1 = ie.Document.all('el1').value
तब जब डेटा अजगर चर में है, तो आप अजगर का उपयोग करके इसी तरह से एक्सेल स्क्रीन खोल सकते हैं:
from win32com.client import Dispatch
xlApp = Dispatch("Excel.Application")
xlWb = xlApp.Workbooks.Open("Read.xls")
xlSht = xlWb.WorkSheets(1)
xlSht.Cells(row, col).Value = el1
मैक के लिए समाधान:
केवल टिप: AppleScript का उपयोग करें - इसमें win32com.client डिस्पैच के रूप में सरल और समान एपीआई है
लिनक्स के लिए समाधान:
java.awt.Robot इसके लिए काम कर सकता है, इस पर क्लिक है, कुंजी प्रेस (गर्म कुंजियों का उपयोग किया जा सकता है), लेकिन लिनक्स के लिए कोई भी एपीआई जिसके बारे में मुझे जानकारी नहीं है कि यह AppleScript की तरह सरल काम कर सकता है
साधारण Google खोज ने इसे बदल दिया:
यदि डेटा वास्तव में एक HTML पृष्ठ है और एएसपी, पीएचपी, या किसी अन्य स्क्रिप्टिंग भाषा द्वारा नहीं बनाया गया है, और आप इंटरनेट एक्सप्लोरर 6 का उपयोग कर रहे हैं, और आपने अपने कंप्यूटर पर एक्सेल स्थापित किया है, तो बस पृष्ठ पर राइट-क्लिक करें और देखें मेनू के माध्यम से। आपको "Microsoft Excel में निर्यात करें" देखना चाहिए। यदि ये सभी शर्तें सही हैं, तो मेनू आइटम पर क्लिक करें और कुछ संकेतों के बाद इसे एक्सेल में आयात किया जाएगा।
यदि आप ऐसा नहीं कर सकते, तो वह एक वैकल्पिक "ड्रैग-एंड-ड्रॉप" विधि देता है:
इसे स्वचालित रूप से करने के लिए व्यावहारिक दो तरीके हैं जबकि केवल एक समाधान का उपयोग सभी ब्राउज़रों में किया जा सकता है। सबसे पहले आपको एक्सेल शीट बनाने के लिए ओपन xml विनिर्देशन का उपयोग करना चाहिए। Microsoft से निःशुल्क प्लगइन्स उपलब्ध हैं जो पुराने कार्यालय संस्करणों के लिए भी यह प्रारूप उपलब्ध कराते हैं। ओपन xml कार्यालय 2007 के बाद से मानक है। दो तरीके स्पष्ट रूप से सर्वराइड या क्लाइंटसाइड हैं।
क्लाइंटसाइड कार्यान्वयन सीएसएस के एक नए मानक का उपयोग करता है जो आपको डेटा के लिए केवल URL के बजाय डेटा संग्रहीत करने की अनुमति देता है। यह एक महान दृष्टिकोण है coz आप किसी भी सर्वर की जरूरत नहीं है, बस डेटा और कुछ जावास्क्रिप्ट। नकारात्मक पक्ष यह है कि Microsoft वर्तमान IE में इसके सभी हिस्सों का समर्थन नहीं करता है (मुझे IE9 के बारे में पता नहीं है) रिलीज। Microsoft छवि होने के लिए डेटा को प्रतिबंधित करता है लेकिन हमें एक दस्तावेज़ की आवश्यकता होगी। फायरफॉक्स में यह काफी ठीक काम करता है। मेरे लिए IE हत्या बिंदु था।
दूसरा तरीका यह है कि हम एक सर्वरसाइड कार्यान्वयन का उपयोग करें। सभी भाषाओं के लिए खुले XML का बहुत अधिक कार्यान्वयन होना चाहिए। आपको बस एक को पकड़ना होगा। ज्यादातर मामलों में यह एक दस्तावेज़ में परिणाम के लिए एक व्यूमोडल को संशोधित करने का सबसे सरल तरीका होगा, लेकिन यह सुनिश्चित करने के लिए कि आप क्लाइंट डेटा से सभी डेटा वापस सर्वर पर भेज सकते हैं और ऐसा ही कर सकते हैं।
function normalexport() {
try {
var i;
var j;
var mycell;
var tableID = "tblInnerHTML";
var drop = document.getElementById('<%= ddl_sections.ClientID %>');
var objXL = new ActiveXObject("Excel.Application");
var objWB = objXL.Workbooks.Add();
var objWS = objWB.ActiveSheet;
var str = filterNum(drop.options[drop.selectedIndex].text);
objWB.worksheets("Sheet1").activate; //activate dirst worksheet
var XlSheet = objWB.activeSheet; //activate sheet
XlSheet.Name = str; //rename
for (i = 0; i < document.getElementById("ctl00_ContentPlaceHolder1_1").rows.length - 1; i++) {
for (j = 0; j < document.getElementById("ctl00_ContentPlaceHolder1_1").rows(i).cells.length; j++) {
mycell = document.getElementById("ctl00_ContentPlaceHolder1_1").rows(i).cells(j);
objWS.Cells(i + 1, j + 1).Value = mycell.innerText;
// objWS.Cells(i + 1, j + 1).style.backgroundColor = mycell.style.backgroundColor;
}
}
objWS.Range("A1", "L1").Font.Bold = true;
// objWS.Range("A1", "L1").Font.ColorIndex = 2;
// objWS.Range("A1", "Z1").Interior.ColorIndex = 47;
objWS.Range("A1", "Z1").EntireColumn.AutoFit();
//objWS.Range("C1", "C1").ColumnWidth = 50;
objXL.Visible = true;
} catch (err) {
alert("Error. Scripting for ActiveX might be disabled")
return
}
idTmr = window.setInterval("Cleanup();", 1);
}
function filterNum(str) {
return str.replace(/[ / ]/g, '');
}