تصدير excel إلى جدول بيانات xml مع الخلايا الفارغة
-
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);
}
لاحظ أن الخلايا الفارغة لن تضاف إلى مجموعة، في حين أن كل شيء على مكانه. تستطيع حساب الحد الأقصى للمؤشر الخلية ممكن (عدد الأعمدة الجدول) من خلال كافة الصفوف إذا كنت بحاجة الى بعض.