2009-09-17 27 views
6

ben xml elektronik tabloya bir excel çalışma kitabı ihracat am ile xml elektronik tabloya excel. Excel, 10 sütun ve 10 satır söyler. Bazı hücreler boştur (yani değeri yoktur).İhracat boş hücreler

Dosyayı xml elektronik tablosuna kaydettiğimde ve içinde boş bir hücre olan satırı gözden geçirdiğimde, yalnızca hücreleri var: boş değere sahip hücre yok ve xml, hücreden önce boşta olduğunu ve boş sonra hücreler birbiri ardına (boş hücre mevcut değil).

<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> 

eksik hücre CELL3 olan


yer kazanmak için değil excel sormak için bir yolu var mı: İşte

xml bir örnektir? Eğlence, xslt kullanarak göründüğü kadar kolay değil mi? neden eksik olmamalıdır - hücre boşsa

+0

Excel 2007 ** bir XML elektronik tablosudur. – RBarryYoung

cevap

1

bu yer kazanmak için makul bir optimizasyon gibi görünüyor.

Orijinal e-tabloyu bilgileri ona-tabloyu yeniden olanak veren saklanır Tam

+0

Bu xml'yi kendi xml şemasına dönüştürmek için bir xsl kullanıyorum Artık bir üstbilgiye (ilk satırdaki yerlere) bir değer bağladığımda hücrenin şu anda eksik olduğunu bilmiyorum –

+0

arasındaki boşluk nedeniyle doğru üstbilgiye kadar Sonra kötü bir şema tasarımınız var. – RBarryYoung

+0

Hiçbir şema kullanmıyorum, Sadece excel'i boş hücreleri koruyarak xml elektronik tablosu olarak kaydetmek istiyorum –

0

yeniden için yeterli bilgiye sahip?

  • Veri, boş, Veri, boş, Veri
  • boş boş Veri, Veri, Veri, boş
  • Veri, boş, Veri, Veri

hepsi: bu satırların ise vermek

  • Satır
  • Hücre Veri/Veri/Cep
  • Hücre Veri/Veri/Cep
  • Hücre Veri/Veri/Cep
  • /Satır
+1

ile aynı muamele görmüyorum geliştirdiğim bilgisayar, ama ihracat yaptığınızda hatırladığım gibi, her bir öğeye ait özellikler vardır ve bunlardan biri, hangi satırın tam olarak olduğunu bilmenizi sağlar (satırlar atlar, bu özniteliği veri ile bir sonraki satıra ekler), sadece ilmeklemiştim özniteliklere sahip olan ve xml –

+0

'daki herşeye ihtiyaç duyduğumda eksik satırları oluşturduğum bir Dizin: Satır veya Hücre başlangıç ​​etiketinde "Bu satırı Satıyorum" veya "Ben Hücre Bu" gibi görünüyor. Row 8'i bekliyoruz ama Index: 10'u yeni bir Satır etiketinde bulabilirsiniz. Boş bir Satır eklediyseniz 8 ve 9 – StrefanA

0

Kendi VBA makro oluşturabilirsiniz. Bunun gibi. Ve Microsoft.xml'ye bir başvuru ekleyin.

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

Yok sayılan boş hücrelerle başa çıkmak için bir kod yazmadan önce aynı sorunları yaşadım. Sadece eğer varsa (detaylar için XML Spreadsheet Reference okuyun) Cell elemanın ss:Index özellik değerini kullanarak ve özgün hücreler düzeni yeniden uygun bir dizinlenmiş dizi pozisyona Cell içeriğini saklamak gerekir.

<?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); 
} 

Her şey yerinde iken boş hücrelerin diziye eklenmeyeceğini unutmayın. İhtiyacınız varsa, tüm satırlarda mümkün olan maksimum hücre dizinini (tablo sütunlarının sayısı) hesaplayabilirsiniz.

+0

Yani, bu yineleme için çalışıyor ama orada ima var gibi görünüyor 'Index' öznitelikleri için hepsini kontrol etmeden hücrelerin listesine rastgele erişimi başarmanın iyi bir yolu yoktur. Bu doğru mu? – DiamondBack