Почему мой Excel портится каждый раз, когда я вставляю более 21 пользователя, набирая XML или через C#?
Я написал программу, которая может извлечь имена пользователей и добавить их в таблицу Excel через XML; однако каждый раз, когда в нем участвуют более 21 пользователя, Excel становится поврежденным. Если я отредактирую файл.xls через блокнот, я могу это исправить или повредить, просто удалив или добавив более 22 пользователей.
Файлы Excel, которые всегда будут повреждены, если я добавлю более 21 пользователя через XML.
Это код, который добавляет пользователей, но это не имеет значения, поскольку даже выполнение этого вручную может воспроизвести проблему повреждения.
public static void XlFormat(string[] nameSplit, DataTable dt, string[] lines, String path)
{
lines = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++) //When I change the condition to i < 22 or lower, it will create a perfect file. More than 22 and it gets corrupted
{
lines[i] = "<Row><Cell ss:StyleID=\"s59\"><Data ss:Type=\"String\">" + dt.Rows[i][1] + "</Data></Cell>" +
"<Cell ss:StyleID=\"s59\"><Data ss:Type=\"String\">" + dt.Rows[i][2] + "</Data></Cell>" +
"<Cell ss:StyleID=\"s59\"><Data ss:Type=\"String\">" + dt.Rows[i][3] + "</Data></Cell>" +
"<Cell ss:StyleID=\"s59\"><Data ss:Type=\"String\">" + dt.Rows[i][4] + "</Data></Cell>" +
"<Cell ss:StyleID=\"s64\"/><Cell ss:StyleID=\"s65\"/></Row>";
}
/* Insert the data into designated points in excel_format.txt using regular */
/* expressions, including the cells for each user. It should be all in one */
/* final string. */
string linesCombined = "";
for (int i = 0; i < lines.Count(); i++)
{
linesCombined += lines[i];
}
string xmlLines = Regex.Replace(excelFormat, "--- INSERT USERS HERE ---", linesCombined);
xmlLines = Regex.Replace(xmlLines, "--- INSERT LEADER HERE ---", nameSplit[2]);
xmlLines = Regex.Replace(xmlLines, "--- INSERT DATE HERE ---", DateTime.Now.Date.ToString());
xmlLines = Regex.Replace(xmlLines, "--- INSERT EMAIL HERE ---", nameSplit[1]);
xmlLines = Regex.Replace(xmlLines, "--- INSERT GROUP HERE ---", nameSplit[0]);
/* Write the final string to an XLS file. This file type will open in Excel as a */
/* spreadsheet even though it was written as an XML file. */
System.IO.File.Delete(@"" + path + nameSplit[0] + ".xls");
System.IO.File.WriteAllText(@"" + path + nameSplit[0] + ".xls", xmlLines);
}
Когда я ограничил свой XLS 22 пользователями?!
1 ответ
Посмотрите на файл, который вы даете с excelFormat
Я думаю, это связано со следующей строкой:
<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="68" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15">
Вы можете видеть, что в нем есть упоминание о ExpandedRowCount
который установлен на 68. Быстрый поиск <Row
в том же файле дает 44 результатов. Если вы добавите свои 22 строки, вы получите 66, что составляет всего 2 коротких. Я не совсем уверен, где это пойдет не так, поскольку разница все еще в 2, но я думаю, что это ваша проблема. Попробуйте изменить атрибут ExpandedRowCount, чтобы он был выше, и протестируйте снова (не более 22 элементов, ровно 22 элемента и более 22 элементов).