XmlWriter を使用して XML レポートを作成しようとしました。不思議なことに、MS Excel でレポート ファイルを開こうとすると、多数のレコードに対して次のエラーが表示されます。「ファイルが壊れているため、開けません」。ただし、レポート ファイルは破損していないと思います。他のエディター (メモ帳など) と同様に、ファイルを開いて内容に問題がないことを確認できます。
以下のコードでは、ループは上限が 1995 の場合は問題なく動作しますが、上限が 1996 の場合は失敗します。
前もって感謝します、
================================================== ======================
private static void WriteReport(XmlWriter writer, ReportingFilters filters, DataContext context)
{
writer.WriteStartElement("Table"); // Begin Table
writer.WriteAttributeString("ss", "ExpandedColumnCount", null, "7");
writer.WriteAttributeString("ss", "ExpandedRowCount", null, "2000");
writer.WriteAttributeString("x", "FullColumns", null, "1");
writer.WriteAttributeString("x", "FullRows", null, "1");
writer.WriteStartElement("Column");
writer.WriteAttributeString("ss", "Width", null, "200");
writer.WriteEndElement();
writer.WriteStartElement("Column");
writer.WriteAttributeString("ss", "Width", null, "125");
writer.WriteEndElement();
writer.WriteStartElement("Column");
writer.WriteAttributeString("ss", "Width", null, "100");
writer.WriteEndElement();
writer.WriteStartElement("Column");
writer.WriteAttributeString("ss", "Width", null, "75");
writer.WriteEndElement();
writer.WriteStartElement("Column");
writer.WriteAttributeString("ss", "Width", null, "75");
writer.WriteEndElement();
// Write the title.
writer.WriteStartElement("Row");
writer.WriteStartElement("Cell");
writer.WriteAttributeString("ss", "StyleID", null, "BorderedTitle");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
writer.WriteString("Selected Dates: " + filters.StartDate.ToShortDateString() + " -" + filters.EndDate.ToShortDateString());
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
// Write the title.
writer.WriteStartElement("Row");
writer.WriteStartElement("Cell");
writer.WriteAttributeString("ss", "StyleID", null, "BorderedTitle");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
writer.WriteString("Date Report was Run: " + DateTime.Now.ToShortDateString());
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
//.. etc
var reportResults = ReportingManager.GetHospitalHitRate(context, filters);
var totalDemos = 0;
var totalMatched = 0;
// Loop works OK for 1995, 1996 fails with "The file is corrupt and cannot be opened"
for (int m = 0; m < 1995; m++ )
{
writer.WriteStartElement("Row"); // Begin Content Row
writer.WriteStartElement("Cell");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
writer.WriteString("aaaaaaaaaaaaaaaaaaaaaaa");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("Cell");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
writer.WriteString("bbbbbbbbbbbbbbb");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("Cell");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
writer.WriteString("cccccccccccc");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("Cell");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
writer.WriteString("dddddddddd");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("Cell");
writer.WriteStartElement("Data");
writer.WriteAttributeString("ss", "Type", null, "String");
//.. etc
writer.WriteString("%");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
}
//.. etc
writer.WriteEndElement(); // End Table.
}
}