1

以下は、ExcelシートからXML形式のデータを取得するために使用しているコードです。ただし、Excelシートで値が空白の場合。XML はそれを値として取っていません。Excelで列名が asEmployeeAddressで、空白の場合はタグを as で閉じる必要があるとし<EmployeeAddress/>ます。

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");
4

1 に答える 1

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>

アップデート:

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();

お役に立てれば。

于 2013-10-08T10:23:41.927 に答える