空单元格包含引号

时间:2012-07-31 13:59:53

标签: c#

我正在读取一个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() + "' ");
    }
}

然而,这不起作用,因为真的细胞不是空的,还有另一种方法吗?

4 个答案:

答案 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