2013-10-08 88 views
1

以下是我用於從Excel表單中獲取XML格式數據的一段代碼。但是如果excel表單中的值爲空白。 XML並沒有將其視爲價值。假設在Excel中,我有一個列名爲EmployeeAddress,如果它的空白,它應該關閉標籤<EmployeeAddress/>在XML中取空白

daAdapter = new OleDbDataAdapter("Select * FROM [KDC Report$]", connection); 
System.Data.DataTable dt = new System.Data.DataTable("Assets"); 
//daAdapter.FillSchema(dt, SchemaType.Source); 
daAdapter.Fill(dt); 

DataSet ds = new DataSet("DocumentElement"); 
ds.Tables.Add(dt); 
var memoryStream = new MemoryStream(); 

using (TextWriter streamWriter = new StreamWriter(memoryStream)) 
{ 
    var xmlSerializer = new XmlSerializer(typeof(DataSet)); 
    xmlSerializer.Serialize(streamWriter, ds); 
    Encoding.UTF8.GetString(memoryStream.ToArray()); 
} 

ds.WriteXml("C:\\Development\\MyAppln\\ExcelToXML\\Products.xml"); 

回答

0

您可以嘗試使用LINQ to XML象下面這樣:

var xlContent = new XElement("Content", from row in dt.AsEnumerable() 
                select new XElement("Row", new XElement("Column1", row["Column1"]), 
                       new XElement("Column2", row["Column2"]), 
                       new XElement("Column3", row["Column3"]), 
                       new XElement("Column4", row["Column4"]))).ToString(); 

輸出示例:

<Content> 
    <Row> 
    <Column1>1</Column1> 
    <Column2>2</Column2> 
    <Column3>3</Column3> 
    <Column4>4</Column4> 
    </Row> 
    <Row> 
    <Column1>5</Column1> 
    <Column2></Column2> 
    <Column3></Column3> 
    <Column4>8</Column4> 
    </Row> 
</Content> 

UPDATE:

既然你有50多個欄目,我已更新我的代碼以遍歷列集合。我不能在dt.Columns上使用LINQ,因爲它沒有實現IEnumerable<T>

var columnNames = new List<string>(); 
foreach (DataColumn column in dt.Columns) 
{ 
    columnNames.Add(column.ColumnName); 
} 

var xlContent = new XElement("Content", from row in dt.AsEnumerable() 
             select new XElement("Row", from columnName in columnNames 
                    select new XElement(columnName, row[columnName]))).ToString(); 

希望這會有所幫助。

+0

thx但我有50列在我的工作表,所以它nt建議逐個寫所有的列名。有沒有一種方法可以實現使用foreach? – NoviceToProgramming

+0

@ user2795254 - 請參閱我更新的答案。 – Channs

+0

我在運行時遇到錯誤,當我使用代碼 「'字符,十六進制值0x20,不能包含在名稱中。」,我必須使用一些編碼。這是我的項目最後一步卡住..任何幫助,將不勝感激 – NoviceToProgramming