2009-09-17 13 views
6

मैं एक्सएमएल स्प्रेडशीट में एक Excel कार्यपुस्तिका निर्यात कर रहा हूँ के साथ एक्सएमएल स्प्रेडशीट के लिए उत्कृष्टता। एक्सेल ने 10 कॉलम और 10 पंक्तियों को कहने दिया है। कुछ कोशिकाएं खाली हैं (यानी कोई मूल्य नहीं है)।निर्यात खाली कोशिकाओं

जब मैं फ़ाइल को एक्सएमएल स्प्रेडशीट में सहेजता हूं और उस पंक्ति की समीक्षा करता हूं जिसमें रिक्त कक्ष होता है, इसमें केवल कोशिकाएं होती हैं: खाली मूल्य वाला सेल वहां नहीं होता है और एक्सएमएल दिखाता है कि रिक्त स्थान से पहले सेल, और रिक्त स्थान के बाद सेल एक के बाद एक है (खाली सेल बस मौजूद नहीं है)।

<Cell ss:StyleID="s36"><Data ss:Type="Number">cell1</Data><NamedCell 
    ss:Name="Print_Area"/></Cell> 
<Cell><Data ss:Type="String">cell2</Data><NamedCell ss:Name="Print_Area"/></Cell> 
<Cell><Data ss:Type="String">cell4</Data><NamedCell 
    ss:Name="Print_Area"/></Cell> 

लापता सेल CELL3 है


वहाँ स्थान बचाने के लिए नहीं एक्सेल पूछने के लिए एक रास्ता है:

यहाँ एक्सएमएल का एक नमूना है? मनोरंजन इतना आसान नहीं है क्योंकि यह xslt का उपयोग कर लगता है?

+0

Excel 2007 ** ** एक XML स्प्रेडशीट है। – RBarryYoung

उत्तर

1

तो सेल खाली है यह स्थान बचाने के लिए एक उचित अनुकूलन लगता है - क्यों यह लापता नहीं किया जाना चाहिए।

आप मूल स्प्रेडशीट

+0

मैं अपने खुद के XML स्कीमा मैं जानना चाहता है कि सेल याद आ रही है अब अगर मैं एक हैडर में कोई मान कनेक्ट असमर्थ हूँ में इस एक्सएमएल को बदलने के लिए एक XSL उपयोग कर रहा हूँ मैं एक मूल्य के साथ अंत (पहली पंक्ति पर स्थान) कनेक्ट नहीं खाई –

+0

की वजह से सही हेडर के लिए तो फिर तुम एक बुरा स्कीमा डिजाइन की है। – RBarryYoung

+0

मैं किसी भी स्कीमा का उपयोग नहीं कर रहा हूं, मैं एक्सेल को खाली कोशिकाओं को संरक्षित करने के साथ एक्सएमएल स्प्रेडशीट के रूप में सहेजना चाहता हूं –

0

वास्तव में जहां जानकारी संग्रहीत किया जाता है देता है कि उसे स्प्रेडशीट पुन: पुन: बनाने के लिए पर्याप्त जानकारी है? यदि इन पंक्तियों:

  • डाटा, खाली, डाटा, खाली, डाटा
  • डाटा, डाटा, डाटा, खाली, खाली
  • डाटा, खाली, खाली, डाटा, डाटा

सभी देना

  • पंक्ति
  • सेल डाटा/डेटा/सेल
  • सेल डाटा/डेटा/सेल
  • सेल डाटा/डेटा/सेल
  • /पंक्ति
+1

के समान माना जाता है, मैं वर्तमान में निकट नहीं हूं कंप्यूटर मैं कहाँ विकसित लेकिन जैसा कि मुझे याद है जब आप निर्यात प्रत्येक तत्व के लिए गुण हैं और उनमें से एक आप जानते हैं कि कौन सी पंक्ति यह ठीक है की सुविधा देता है (जब वह पंक्तियों कूदता वह डेटा के साथ अगली पंक्ति को यह विशेषता जोड़), मैं सिर्फ अधिक फंस विशेषताओं के साथ इस तत्वों और के रूप में मैं एक्सएमएल –

+0

में सब कुछ एक सूचकांक है की जरूरत लापता पंक्तियों बनाया: .. पंक्ति या सेल स्टार्ट टैग में है कि कहने के लिए या "मुझे लगता है कि सेल हूँ" "मैं इस पंक्ति हूँ" लगता है आप तो 'पंक्ति 8 की उम्मीद है, लेकिन सूचकांक लगता है फिर से: एक नई पंक्ति टैग में 10 आप एक खाली पंक्ति 8 और 9 – StrefanA

0

आप अपनी खुद की VBA मैक्रो का निर्माण कर सकते हैं। इस तरह। और माइक्रोसॉफ्ट.एक्सएमएल में एक संदर्भ जोड़ें।

Sub makeXml() 
    ActiveCell.SpecialCells(xlLastCell).Select 
    Dim lastRow, lastCol As Long 
    lastRow = ActiveCell.Row 
    lastCol = ActiveCell.Column 

    Dim iRow, iCol As Long 

    Dim xDoc As New DOMDocument 
    Dim rootNode As IXMLDOMNode 
    Set rootNode = xDoc.createElement("Root") 
    Dim rowNode As IXMLDOMNode 
    Dim colNode As IXMLDOMNode 

    'loop over the rows 
    For iRow = 2 To lastRow 
     Set rowNode = xDoc.createElement("Row") 
     'loop over the columns 
     For iCol = 1 To lastCol 
      If (Len(ActiveSheet.Cells(1, iCol).Text) > 0) Then 
       Set colNode = xDoc.createElement(GetXmlSafeColumnName(ActiveSheet.Cells(1, iCol).Text)) 

       colNode.Text = ActiveSheet.Cells(iRow, iCol).Text 
       rowNode.appendChild colNode 
      End If 
     Next iCol 
     rootNode.appendChild rowNode 
    Next iRow 
    xDoc.appendChild rootNode 

    fileSaveName = Application.GetSaveAsFilename(_ 
    fileFilter:="XML Files (*.xml), *.xml") 
     xDoc.Save (fileSaveName) 
    set xDoc = Nothing 

End Sub 
Function GetXmlSafeColumnName(name As String) 
    Dim ret As String 
    ret = name 
    ret = Replace(ret, " ", "_") 
    ret = Replace(ret, ".", "") 
    ret = Replace(ret, ",", "") 
    ret = Replace(ret, "&", "") 
    ret = Replace(ret, "!", "") 
    ret = Replace(ret, "@", "") 
    ret = Replace(ret, "$", "") 
    ret = Replace(ret, "#", "") 
    ret = Replace(ret, "%", "") 
    ret = Replace(ret, "^", "") 
    ret = Replace(ret, "*", "") 
    ret = Replace(ret, "(", "") 
    ret = Replace(ret, ")", "") 
    ret = Replace(ret, "-", "") 
    ret = Replace(ret, "+", "") 

    GetXmlSafeColumnName = ret 
End Function 
0

मैं इससे पहले कि मैं छोड़े गए रिक्त कक्षों से निपटने के लिए कुछ कोड लिखा है एक ही मुद्दों था। तुम बस Cell तत्व की ss:Index विशेषता मान का उपयोग करता है, तो यह मौजूद है (विवरण के लिए XML Spreadsheet Reference पढ़ें) और मूल कोशिकाओं पुन: आदेश एक उचित अनुक्रमित सरणी स्थिति में Cell सामग्री स्टोर करने के लिए की जरूरत है।

<?php 
$doc = new DOMDocument('1.0', 'utf-8'); 
if (!$doc->load('sample.xml')) 
    die(); 

$root = $doc->documentElement; 
$root->removeAttributeNS($root->getAttributeNode('xmlns')->nodeValue, ''); 

$xpath = new DOMXPath($doc); 
foreach ($xpath->query('/Workbook/Worksheet/Table/Row') as $row) 
{ 
    $cells = array(); 
    $cell_index = 0; 
    foreach ($xpath->query('./Cell', $row) as $cell) 
    { 
     if ($cell->hasAttribute('ss:Index')) 
      $cell_index = $cell->getAttribute('ss:Index'); 
     else 
      ++$cell_index; 
     $cells[$cell_index - 1] = $cell->nodeValue; 
    } 
    // now process data 
    print_r($cells); 
} 

ध्यान दें कि रिक्त कक्ष सरणी में नहीं जोड़े जाएंगे, जबकि बाकी सब कुछ उसके स्थान पर है। यदि आपको कुछ चाहिए तो आप सभी पंक्तियों के माध्यम से अधिकतम संभव सेल इंडेक्स (तालिका कॉलम की संख्या) की गणना कर सकते हैं।

+0

तो, कि यात्रा के लिए काम करता जोड़ने, लेकिन यह सूचित करते हैं कि प्रतीत होता है वहाँ कोई अच्छा तरीका पहले उन सब को 'सूचकांक' विशेषताओं के लिए जाँच किए बिना सेल की सूची में यादृच्छिक अभिगम पूरा करने के लिए है। क्या वो सही है? – DiamondBack

संबंधित मुद्दे