在数据库中插入空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 |
| |
| |
尝试将?:操作符与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);
}