linqtoexcel c# 在获取空白字段后将其设为 null 或 0?
linqtoexcel c# make blank fields null or 0 after fetching them?
基本上我有一个包含很多工作表的 excel 文件,只要其中一个工作表引用了另一个工作表,但引用是一个空单元格,例如单元格 'C5' 'Example' 工作表引用了 'RefEx' 工作表中的单元格 'J10',如果单元格 'J10' 为空,则单元格 'C5' 将为空,但不会空,因为它仍然包含引用,因此我无法将它插入我的数据库,因为我需要将它作为小数插入(空行插入为 0,00)。
只要我更改具有这些引用的列的格式,它就可以在带有引用的空白单元格上插入 0,00,但是我拥有的工作表数量需要大量手动工作,并且会有。
有没有办法在不触及 excel 文件的情况下使这些字段为空或至少使它们为 0?
我唯一觉得奇怪的是我可以很容易地将单元格读取为字符串,它们看起来只是空的,但是当我尝试将它们更改为小数时,错误就发生了。
这是我连接和查询 excel 文件的方式:
string pathToExcelFile = @"D:\Programming Tools\Visual Studio\Projects\KPIimport\SampleXLSFile.xls";
ConnectionExcel ConObject = new ConnectionExcel(pathToExcelFile);
var query2 = from a in ConObject.UrlConnection.Worksheet<Product>("Sample-spreadsheet-file") select a;
还有我的 class:
class Product {
public string ItemName {
get;
set;
}
public string DogName {
get;
set;
}
public string FatDog {
get;
set;
}
在我的代码中出现错误的地方,因为它需要一个可以转换为小数的字符串,但引用与此混淆:
command.Parameters.AddWithValue("@ItemName", item.ItemName);
command.Parameters.AddWithValue("@DogName", item.DogName);
command.Parameters.AddWithValue("@FatDog", Convert.ToDecimal(item.FatDog));
感谢 Caius Jard,它已修复:
private string _fatDog;
public string FatDog {
get {
if(_fatDog == null) {
return "0";
} else if(_fatDog == "") {
return "0";
} else if(_fatDog == "-"))
return "0";
} else {
return _fatDog;
}
}
set {
_fatDog = value;
}
}
您可以在 get 中添加一个正文,用于测试当前值是否存在各种不受欢迎的情况,并且 returns 改为“0”,例如
private string _fatDog;
public string FatDog(
if(_fatDog == null)
return "0";
else if(_fatDog == "")
return "something else";
else if(_fatDog.StartsWith("'Data")) //ensure _fatDog isn't null before you do this - this code here does that in the "if(_fatDog == null)" part
return "123";
else
return _fatDog;
)
顺便说一句,偶尔有充分的理由避免使用 AddWithValue - https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
基本上我有一个包含很多工作表的 excel 文件,只要其中一个工作表引用了另一个工作表,但引用是一个空单元格,例如单元格 'C5' 'Example' 工作表引用了 'RefEx' 工作表中的单元格 'J10',如果单元格 'J10' 为空,则单元格 'C5' 将为空,但不会空,因为它仍然包含引用,因此我无法将它插入我的数据库,因为我需要将它作为小数插入(空行插入为 0,00)。
只要我更改具有这些引用的列的格式,它就可以在带有引用的空白单元格上插入 0,00,但是我拥有的工作表数量需要大量手动工作,并且会有。
有没有办法在不触及 excel 文件的情况下使这些字段为空或至少使它们为 0?
我唯一觉得奇怪的是我可以很容易地将单元格读取为字符串,它们看起来只是空的,但是当我尝试将它们更改为小数时,错误就发生了。
这是我连接和查询 excel 文件的方式:
string pathToExcelFile = @"D:\Programming Tools\Visual Studio\Projects\KPIimport\SampleXLSFile.xls";
ConnectionExcel ConObject = new ConnectionExcel(pathToExcelFile);
var query2 = from a in ConObject.UrlConnection.Worksheet<Product>("Sample-spreadsheet-file") select a;
还有我的 class:
class Product {
public string ItemName {
get;
set;
}
public string DogName {
get;
set;
}
public string FatDog {
get;
set;
}
在我的代码中出现错误的地方,因为它需要一个可以转换为小数的字符串,但引用与此混淆:
command.Parameters.AddWithValue("@ItemName", item.ItemName);
command.Parameters.AddWithValue("@DogName", item.DogName);
command.Parameters.AddWithValue("@FatDog", Convert.ToDecimal(item.FatDog));
感谢 Caius Jard,它已修复:
private string _fatDog;
public string FatDog {
get {
if(_fatDog == null) {
return "0";
} else if(_fatDog == "") {
return "0";
} else if(_fatDog == "-"))
return "0";
} else {
return _fatDog;
}
}
set {
_fatDog = value;
}
}
您可以在 get 中添加一个正文,用于测试当前值是否存在各种不受欢迎的情况,并且 returns 改为“0”,例如
private string _fatDog;
public string FatDog(
if(_fatDog == null)
return "0";
else if(_fatDog == "")
return "something else";
else if(_fatDog.StartsWith("'Data")) //ensure _fatDog isn't null before you do this - this code here does that in the "if(_fatDog == null)" part
return "123";
else
return _fatDog;
)
顺便说一句,偶尔有充分的理由避免使用 AddWithValue - https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/