为什么每次通过键入 XML 或通过 C# 插入超过 21 个用户时,我的 Excel 都会损坏

本文关键字:我的 用户 损坏 Excel 插入 XML 为什么 | 更新日期: 2023-09-27 17:56:01

我编写了一个程序,该程序可以通过xml提取用户名并将其添加到Excel工作表中;但是,每次有超过21个用户时,Excel就会损坏。如果我通过记事本编辑.xls文件,我可以通过简单地删除或添加超过 22 个用户来修复或损坏它。

如果我通过 xml 插入超过 21 个用户,则总是会损坏的 Excel 文件。

这是添加用户的代码,但这并不重要,因为即使手动执行此操作也会复制损坏问题。

 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 个用户?!

为什么每次通过键入 XML 或通过 C# 插入超过 21 个用户时,我的 Excel 都会损坏

看看你给出的带有excelFormat项的文件,我猜这是由于其中的以下行:

<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="68" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15">

您可以看到它提到了设置为 68 的ExpandedRowCount。在同一文件中快速搜索<Row会给出 44 个结果。如果您添加 22 行,则最多 66 行,仅短 2 行。我不太确定这是哪里出了问题,因为仍然存在 2 的差异,但我想这是您的问题。尝试将 ExpandedRowCount 属性更改为更高的属性,然后再次测试(少于 22 个项目、正好 22 个项目和超过 22 个项目)。