在数据库中插入空excel单元格作为空白单元格

本文关键字:单元格 空白 excel 数据库 插入 | 更新日期: 2023-09-27 18:17:24

我有一个简单的按钮事件导入excel表格到数据库。这段代码是这样的:

private void button6_Click(object sender, EventArgs e)
    {
        OpenFileDialog theDialog = new OpenFileDialog();
        theDialog.Title = "Open Text File";
        theDialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm;*.xltm;*.xltx";
        theDialog.InitialDirectory = @"C:'";
        if (theDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                foreach (var worksheetx in Workbook.Worksheets(theDialog.FileName.ToString()))
                {
                    foreach (var row in worksheetx.Rows)
                    {
                            String Temp = @"INSERT INTO [dbo].[myTable]
                                       ([Status]
                                       ,[NName]
                                       ,[Notes]
                                       )
                                 VALUES
                                       ('<Status>'
                                       ,'<NName>'
                                       ,'<Notes>'
                                       )";
                            String Temp1 = Temp;
                            bool ForceContinue = false;
                        foreach (var cell in row.Cells)
                        {                                                             
                            if (cell != null)
                            {                                  
                                if (cell.ColumnIndex == 0)Temp1 = Temp1.Replace("<Status>", cell.Text);
                                if (cell.ColumnIndex == 1)Temp1 = Temp1.Replace("<NName>", cell.Text);                                   
                                if (cell.ColumnIndex == 2)Temp1 = Temp1.Replace("<Notes>", cell.Text);                                                                                                                                                    
                            }
                            else
                            {
                             //Looking for this part- How to insert 'NULL' or Blank cell.Text
                            }
                        }
                        DBConn.Execute(Temp1);     

例如,如果我的excel表格列- 'Notes'像

| Check |
|       |
|       |

当前插入到数据库中,如

| Check |
|<Notes>|
|<Notes>|

我希望它是这样的,其中空插入作为空白

| Check |
|       |
|       |

在数据库中插入空excel单元格作为空白单元格

尝试将?:操作符与DBNull结合使用,而不是使用if语句。

foreach (var cell in row.Cells)
{
        if (cell.ColumnIndex == 0) Temp1 = Temp1.Replace("<Status>", string.IsNullOrWhiteSpace(cell.Text) ? DBNull.Value : cell.Text);
        if (cell.ColumnIndex == 1) Temp1 = Temp1.Replace("<NName>", string.IsNullOrWhiteSpace(cell.Text) ? DBNull.Value : cell.Text);
        if (cell.ColumnIndex == 2) Temp1 = Temp1.Replace("<Notes>", string.IsNullOrWhiteSpace(cell.Text) ? DBNull.Value : cell.Text);
}

这里有一些链接。?: and DBNull

将内部'foreach (var cell in row.Cells)'中的代码块替换为下面所写的代码。

if (cell != null) { if (cell.ColumnIndex == 0)Temp1 = Temp1.Replace("<Status>", cell.Text); if (cell.ColumnIndex == 1)Temp1 = Temp1.Replace("<NName>", cell.Text); if (cell.ColumnIndex == 2)Temp1 = Temp1.Replace("<Notes>", cell.Text); } else { Temp1 = "" ; }

第一个问题是您没有任何逻辑来捕获"空"excel单元格—您只需要代码来捕获非空单元格。

其次,在这段代码中,单元格永远不会为空,因为您只是在foreach循环中将其实例化为对象。但是,属性Value、Value2或Text可能为空或为空。检查相应的属性是否为空

根据你想做的事情,使用这个检查:

if (cell.Value != null)

if (String.IsNullOrEmpty(cell.Text))

,但我认为你甚至不需要这个检查,因为你的replace方法会自动完成。

第三,也许我有一个不同的Excel互操作语言,但这甚至不适合我编译:

if (cell.ColumnIndex == 0)

我可以使用:

if (cell.Column == 0) 

但是这抛出了一个异常,因为Excel对以1开头的列进行编号,而不是0。

第四,你有一个很长的foreach循环来遍历每一行。尝试以下方法来缩短处理时间:

foreach (Range row in sheet.UsedRange)

第五,您不需要每次都实例化字符串Temp。将该代码移到第一个循环之前。

最后,我用下面的代码替换了相应的文本:

            foreach (Range cell in row.Cells)
            {
                if (cell.Column == 1) Temp1 = Temp1.Replace("<Status>", cell.Text);
                if (cell.Column == 2) Temp1 = Temp1.Replace("<NName>", cell.Text);
                if (cell.Column == 3) Temp1 = Temp1.Replace("<Notes>", cell.Text);
            }