linqtoexcel c # сделать пустые поля нулевыми или 0 после их извлечения? - PullRequest
0 голосов
/ 12 сентября 2018

По сути, у меня есть файл Excel с большим количеством таблиц, когда одна из этих таблиц имеет ссылку на другую таблицу, но ссылка является пустой ячейкой, например, ячейка «C5» в таблице «Пример» содержит ссылку наячейка «J10» на листе «RefEx», если ячейка «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;
  }
} 

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете добавить в 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/

...