0

我正在尝试使用 C# 读取包含一些合并单元格的 Excel 工作表。我在另一篇文章中读到,从代码的角度来看,合并的单元格仍然存在,但它们只有空值。所以我尝试跳过空值,但我仍然得到不稳定的结果。这是我正在使用的代码。它应该使用电子表格中的值填充 HTML 表:

private void Output_Excel_File()
{
    string inputFileLocation = AppDomain.CurrentDomain.BaseDirectory + "/dashboard.xls";
    DataSet ds = Get_Spreadsheet_Data(inputFileLocation, "Dashboard Statistics");
    if (ds.Tables.Count > 0)
    {
        foreach (DataTable dt in ds.Tables)
        {
            int row = 0;
            foreach (DataRow dr in dt.Rows)
            {
                int col = 0;
                foreach (DataColumn dc in dt.Columns)
                {
                    string cellValue = dr[dc].ToString();
                    cellValue = Regex.Replace(cellValue, "\n", "<br /");
                    if (cellValue == "X" || cellValue == null)
                    {
                        col++;
                        continue;
                    }
                    string index = "r" + row.ToString() + "c" + col.ToString();
                    Literal cellTarget = (Literal)form1.FindControl(index);
                    cellTarget.Text = cellValue;
                    col++;
                }
                row++;
            }
        }
    }
}

特别是我的索引已关闭并且行:

cellTarget.Text = cellValue;

当索引与 HTML 中的索引不匹配时,总是会抛出空引用异常。

我用谷歌搜索和搜索,但我很难过。任何建议表示赞赏。

4

1 回答 1

0

据我记得,合并单元格的最左上角单元格将携带数据。合并组中的所有其他单元格引用都将为空。

编辑:如果你想跳过处理 r0c1(因为我认为它不存在)如果它是“X”或 Null,那么你将不得不做这样的事情:

foreach (DataColumn dc in dt.Columns)
{
    string cellValue = dr[dc].ToString();
    cellValue = Regex.Replace(cellValue, "\n", "<br /"); 
    if (cellValue != "X" | cellValue != null)
    {
        string index = "r" + row.ToString() + "c" + col.ToString();
        Literal cellTarget = (Literal)form1.FindControl(index);
        cellTarget.Text = cellValue; 
    }

    col++;
}

另外我认为 cellValue 永远不会为空,但它可能是空的"",所以我喜欢使用:

if (cellValue != "X" | cellValue.Length == 0) 

编辑2:

您可能会对NullRefference收到的异常感到有些困惑。从我看到的不是因为它cellValue是空的,它来自:

(Literal)form1.FindControl(index);

试图找到我认为不存在的 r0c1 并返回一个空控件(文字)。所以当你去使用

cellTarget.Text = cellValue;

您会收到 NullReference 错误,因为对象本身cellTarget为空。

于 2012-06-14T17:16:08.143 回答