تصدير excel إلى جدول بيانات xml مع الخلايا الفارغة

StackOverflow https://stackoverflow.com/questions/1437595

  •  08-07-2019
  •  | 
  •  

سؤال

أنا المصدرة مصنف excel إلى جدول بيانات xml.Excel قد دعونا نقول 10 الأعمدة والصفوف 10.بعض الخلايا الفارغة(أنا.ه مع أي القيمة).

عندما أقوم بحفظ الملف في جدول بيانات xml و مراجعة صف يحتوي على خلية فارغة في ذلك فقط الخلايا:الخلية التي تحتوي على قيمة فارغة ليس هناك xml تبين أن الخلية قبل الفراغ ، و الخلية بعد الفراغ هي واحدة بعد أخرى (خلية فارغة لا يوجد).

هنا عينة xml:

<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


هل هناك طريقة طرح excel عدم حفظ الفضاء ؟ الترفيه ليس من السهل كما يبدو باستخدام xslt ؟

هل كانت مفيدة؟

المحلول

إذا كانت الخلية فارغة هذا يبدو معقولا الأمثل لتوفير مساحة - لماذا لا ينبغي أن يكون في عداد المفقودين

لديك ما يكفي من المعلومات لإعادة جدول البيانات الأصلي

نصائح أخرى

بالضبط حيث يتم تخزين المعلومات التي يتيح له إعادة إنشاء جداول البيانات ؟ إذا هذه الصفوف:

  • بيانات فارغة بيانات فارغة البيانات
  • البيانات, البيانات, بيانات فارغة فارغة
  • بيانات فارغة فارغة ، البيانات ،

تعطي كل

  • الصف
  • خلية Data /Data /الخليوي
  • خلية Data /Data /الخليوي
  • خلية Data /Data /الخليوي
  • /الصف

ويمكنك بناء ماكرو VBA الخاصة بك. مثل هذه. وإضافة مرجع إلى Microsoft.xml.

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

وكان لي نفس القضايا المعروضة لقد كتبت بعض رمز للتعامل مع خلايا فارغة حذفها. تحتاج فقط إلى استخدام قيمة السمة ss:Index العنصر Cell إذا كان موجودا (اقرأ <لأ href = "http://msdn.microsoft.com/en-us/library/office/aa140066٪28v=office.10٪29.aspx "يختلط =" نوفولو "> XML جدول المرجعي للحصول على مزيد من التفاصيل) وتخزين محتويات 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);
}

لاحظ أن الخلايا الفارغة لن تضاف إلى مجموعة، في حين أن كل شيء على مكانه. تستطيع حساب الحد الأقصى للمؤشر الخلية ممكن (عدد الأعمدة الجدول) من خلال كافة الصفوف إذا كنت بحاجة الى بعض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top