Считайте Excel с помощью LINQ

Я не вижу точки в помещении анонимного пространства имен в заголовочный файл. Я захватил стандарт и libstdc ++ заголовки, не нашли анонимных пространств имен независимо одного в tuple заголовок (C++ 1x материал):

  // A class (and instance) which can be used in 'tie' when an element
  // of a tuple is not required
  struct _Swallow_assign
  {
    template
      _Swallow_assign&
      operator=(const _Tp&)
      { return *this; }
  };

  // TODO: Put this in some kind of shared file.
  namespace
  {
    _Swallow_assign ignore;
  }; // anonymous namespace

Это так, можно сделать

std::tie(a, std::ignore, b) = some_tuple;

, элементам some_tuple присваивают переменные в левой стороне (см. здесь ), подобная техника используется для этот итератор. Второй элемент проигнорирован.

, Но как они говорят, это должно быть помещено в .cpp файл, и один экземпляр должен быть совместно использован всеми пользователями. Они поместили бы объявление его в заголовок как это затем:

extern _Swallow_assign ignore;

16
задан NETQuestion 28 September 2009 в 08:17
поделиться

3 ответа

Насколько я понимаю, я предлагаю создать класс BookData, содержащий нужные вам свойства, в данном случае Country, Code, Name и IBN.

Затем, когда вы заполнили свой DataSet с материалами Excel, создайте новый список и прокрутите DataRows в DataSet, добавив значения Excel в список.

Затем вы можете использовать Linq в списке следующим образом:

 List<BookData> results = from books in bookList
                                       where books.country == 'US'
                                       select books;

Или что-то в этом роде. У меня нет Visual Studio, и Intellisense меня избаловал, так что да. > __>

3
ответ дан 30 November 2019 в 16:19
поделиться

Предложение 1

Оформить заказ ЭТА ссылка ...... как предлагает AKofC, создание класса для хранения ваших данных будет вашим первым портом захода. В опубликованной мною ссылке есть небольшой пример той идеи, которую мы предлагаем.

Предложение 2 с примером ...

Очевидная вещь, которую нужно сделать из опубликованного вами кода, - это создать новый класс для сохранить информацию о книге в.

Затем вы просто определяете, какие поля из вашего документа Excel вы хотите передать в новый экземпляр вашего класса информации о книге.

Новый класс информации о книге:

class MyBookInfo
{
    public string CountryName { get; set; }
    public string BookCode { get; set; }
    public string BookName { get; set; }
}

Метод для получения информации :

public void GetMyBookInfoFromExcelDocument()
        {
            string filename = @"C:\\" + "Book1.xls";
            string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                          "Data Source=" + filename + ";" +
                                          "Extended Properties=Excel 8.0;";

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
            DataSet myDataSet = new DataSet();
            dataAdapter.Fill(myDataSet, "BookInfo");
            DataTable dataTable = myDataSet.Tables["BookInfo"];


            var rows = from p in dataTable.AsEnumerable()
                       where p[0].ToString() != null || p[0].ToString() != "" && p.Field<string>("F2") != null
                       select new MyBookInfo
                       {
                           CountryName = p.Field<string>("InsertFieldNameHere"),
                           BookCode = p.Field<string>("InsertFieldNameHere"),
                           BookName = p.Field<string>("InsertFieldNameHere")
                       };
        }
6
ответ дан 30 November 2019 в 16:19
поделиться

Вам нужно сделать две вещи:

Во-первых, вам необходимо переформатировать электронную таблицу, чтобы в первой строке были заголовки столбцов, как показано в таблице ниже

| Country | Code | Name    | IBN  |
|---------|------|---------|------|
| Aust    | UX   | test1   | 34   |
| Aust    | UZ   | test2   | 345  |
| Aust    | UN   | test3   | 5654 |
| US      | UX   | name1   | 567  |
| US      | TG   | name2   | 123  |
| US      | UM   | name3   | 234  |

Во-вторых, используйте библиотеку Linq to Excel для получения данных. Он позаботится о подключении oledb и создании sql за вас. Ниже приведен пример того, насколько легко использовать библиотеку

var book = new ExcelQueryFactory("pathToExcelFile");
var australia = from x in book.Worksheet()
                where x["Country"] == "Aust"
                select new
                {
                   Country = x["Country"],
                   BookCode = x["Code"],
                   BookName = x["Name"]
                };

. Для получения дополнительной информации о проекте с открытым исходным кодом см. вводное видео Linq to Excel .

32
ответ дан 30 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: