我正在读取一个speadsheet中的数据,然后进入一个记事本csv文件,在c#中然后再回到一个speadsheet。然而,在电子表格中,一些单元格是空的(通过空,我的意思是值为“”“,只是空格和空格的数量可以变化)。在转移到记事本并返回电子表格时,这些值可能会丢失。有没有办法区分这些细胞,所以我可以在那时放置引号,这样细胞仍然存在?
我已经发现大多数空单元格都有文件类型data_string或bool,这段代码适用于所有data_string
if (fileType == "data_string")
{
string see = cell.getFormula().ToString();
sw.Write("'" + see + "' ");
}
else
{
string see = cell.getFormula().ToString();
sw.Write(see + " ");
}
但是我不希望所有bool数据都在引号中只是那些空的。所以,到目前为止我有
if (fileType == "bool")
{
if (cell.getFormula().Empty)
{
sw.Write("'" + cell.getFormula().ToString() + "' ");
}
}
然而,这不起作用,因为真的细胞不是空的,还有另一种方法吗?
答案 0 :(得分:1)
您可以检查单元格长度是否大于0(因此不是空的),如果不是(这意味着它是空的),则添加撇号。我是c#的新手所以我不知道这是否有用
if (fileType == "bool")
{
if (!cell.getFormula().length > 0) // If the cell is not longer than 0 characters
{
string see = cell.getFormula().ToString();
sw.Write("'" + see + "' ");
}
else
{
string see = cell.getFormula().ToString();
sw.Write(see + " ");
}
答案 1 :(得分:1)
然后忽略它们是bool的事实,只是检查字段是否为空,如:
if ( cell.getFormula().StartsWith(" "))
{
{
for (int i = 0; i < cell.getFormula().Length; i++)
{
if (cell.getFormula()[i] == ' ')
{
emptyBool.Add(" ");
}
}
string emptyBoolString = string.Join(" ", emptyBool.ToArray());
答案 2 :(得分:0)
手动编码导入和导出分隔函数充满了危险。我建议您使用像FileHelpers这样的第三方库,它是专门为这些情况提供帮助的。
像FileHelpers这样的库允许您使用特定属性修饰模型,然后使用库来完成繁重的工作。以下是他们网站的示例: -
<强>模型强>
[DelimitedRecord(",")]
public class Customer
{
public int CustId;
public string Name;
public decimal Balance;
[FieldConverter(ConverterKind.Date, "dd-MM-yyyy")]
public DateTime AddedDate;
}
Parser class
var engine = new FileHelperEngine(typeof(Customer));
// To Read Use:
Customer[] res = engine.ReadFile("FileIn.txt") as Customer[];
// To Write Use:
engine.WriteFile("FileOut.txt", res);
注意:还有其他类似的工作,但我只使用了FileHelpers并且没有失望。
答案 3 :(得分:0)
if you are using **bool**, then its a **bit** so it can't be empty,
it is either true or false or you can use null