-1

我从电子表格中读取数据并移动到记事本 csv 文件中,在 c# 中,然后返回电子表格。然而,在电子表格中,一些单元格是空的(空我的意思是有一个=“”的值,只是空格,空格的数量可能会有所不同)。在移动到记事本并返回电子表格时,这些值可能会丢失。有没有办法区分这些细胞,所以我可以在周围加上引号,这样细胞仍然存在?

我发现大多数空单元格的文件类型为 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 + " ");
}

但是我不希望所有布尔数据都在引号中,只是那些为空的。所以,到目前为止我有

if (fileType == "bool")
{

    if (cell.getFormula().Empty)
    {
        sw.Write("'" + cell.getFormula().ToString() + "' ");
    }
}

然而,这不起作用,因为单元格不是空的,还有其他方法吗?

4

4 回答 4

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());
于 2012-08-03T14:32:30.897 回答
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 + " ");
    }
于 2012-07-31T14:23:01.323 回答
0

手动编码导入和导出分隔函数充满危险。相反,我建议您使用像FileHelpers这样的 3rd 方库,它是专门为帮助解决这些情况而开发的。

FileHelpers 之类的库允许您使用特定属性装饰模型,然后使用该库完成繁重的工作。这是他们网站上的示例:-

模型

[DelimitedRecord(",")]
public class Customer
{
    public int CustId;

    public string Name;

    public decimal Balance;

    [FieldConverter(ConverterKind.Date, "dd-MM-yyyy")]
    public DateTime AddedDate;

}

解析器类

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并没有失望。

于 2012-07-31T14:05:51.570 回答
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
于 2012-07-31T14:07:16.010 回答