ブラックボックス システムから受け取ったファイルがあります。このファイルは何らかの形で xml と Excel の間で混在しています。Excel でファイルを開くと、最初に警告メッセージが表示されます。テキスト エディタで開くと、次の xml ヘッドが表示されます。
<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Styles>
<Style ss:ID="Default">
<Alignment ss:Horizontal="Left" ss:Vertical="Bottom" />
<Borders/>
<Font/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="sHeader">
<Alignment ss:Horizontal="Left" ss:Vertical="Bottom" />
<Font ss:Bold="1"/>
<NumberFormat ss:Format="@"/>
</Style>
私は多くのソリューションを試しました(最初にファイルをDataGridViewにインポートしてからcsvにエクスポートしようとしましたが、常に認識されないデータベース形式が表示されます
まず、これはどのような xls と xml ファイルが混在しているファイルですか? これらのヘッド情報をすべて削除して、単純な csv ファイルを作成するにはどうすればよいですか?
更新: この Excel-XML ファイルからデータをロードする方法を見つけましたが、すべてのデータを 1 つの列で受け取ります
これは私が使用したコードです:
XmlDocument xml = new XmlDocument();
string filePath = @"C:\temp\test.xml";
xml.Load(filePath);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
XmlElement root = xml.DocumentElement;
XmlNodeList nodeList = root.SelectNodes("//ss:Data", nsmgr);
dataGridView1.DataSource= ConvertXmlNodeListToDataTable(nodeList);
public static DataTable ConvertXmlNodeListToDataTable(XmlNodeList xnl)
{
DataTable dt = new DataTable();
int TempColumn = 0;
foreach (XmlNode node in xnl.Item(0).ChildNodes)
{
TempColumn++;
DataColumn dc = new DataColumn(node.Name, System.Type.GetType("System.String"));
if (dt.Columns.Contains(node.Name))
{
dt.Columns.Add(dc.ColumnName = dc.ColumnName + TempColumn.ToString());
}
else
{
dt.Columns.Add(dc);
}
}
int ColumnsCount = dt.Columns.Count;
for (int i = 0; i < xnl.Count; i++)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < ColumnsCount; j++)
{
dr[j] = xnl.Item(i).ChildNodes[j].InnerText;
}
dt.Rows.Add(dr);
}
return dt;
}
}