【问题标题】:linqtoexcel c# make blank fields null or 0 after fetching them?linqtoexcel c#在获取空白字段后使空白字段为空或为0?
【发布时间】:2018-09-11 21:21:22
【问题描述】:

基本上我有一个包含很多工作表的 excel 文件,只要其中一个工作表引用另一个工作表,但引用是一个空单元格,例如“示例”工作表中的单元格“C5”引用“RefEx”工作表中的单元格“J10”,如果单元格“J10”为空,则单元格“C5”将为空白,但不会为空,因为它仍然包含引用,因此我无法将其插入到我的数据库,因为我需要将其作为小数插入(空行插入为 0,00)。

只要我更改具有这些引用的列的格式,它就可以在带有引用的空白单元格上插入 0,00,但是对于我拥有的工作表数量来说,这是很多手动工作,并且将拥有.

有没有办法让这些字段为空或至少只是让它们为 0 而无需接触 excel 文件?

我唯一觉得奇怪的是,我可以轻松地将单元格读取为字符串,它们看起来只是空的,但是一旦我尝试将它们更改为小数,就会发生错误。

这是我连接和查询 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 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;
  }
} 

【问题讨论】:

    标签: c# excel linq linq-to-excel


    【解决方案1】:

    您可以在 get 中添加一个主体,用于测试各种不受欢迎的当前值,并返回“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/

    【讨论】:

    • 我试过这个,问题是它们实际上不是“”或空值,那里有一些东西......有一个参考,例如“='Data - 2017'!J73”,但我只在插入数据库之前尝试过这样做,如果我像你的例子那样做,也许它会起作用,明天必须尝试,感谢输入
    • 另外,我认为 Add 已被弃用甚至已过时?编辑:没关系,只有 Add(String, Object) 已过时
    • 哇,这太奇怪了,但显然问题在于excel中“0”到“-”的格式,只要我得到的所有其他错误都不会出现我用你的例子来测试它出现的第一列上的“-”,不知何故,当在前一列中检查它时,尝试在其他列中插入数据库时​​,引用不会给出错误....这是太奇怪了,但我真的很感谢我的男人的帮助!接受
    • 抱歉,刚刚注意到这段代码有问题;它是在 iphone 上写的,它通过在字符串周围加上重音引号而不是直接引号显然“帮助”了我 - 真的很难在设备本身上注意到这一点:/
    • 没什么问题:p 一切都通过检查“-”来解决它应该如何,只要我检查“-”,其中“0”是,带有引用的单元格就不会抛出错误在excel中显示为“-”,真的很奇怪,但它有效。
    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多