Почему мой 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 элементов).

Другие вопросы по тегам