programing

LINQ를 사용하여 Excel 읽기

lastmoon 2023. 7. 16. 17:46
반응형

LINQ를 사용하여 Excel 읽기

아래 (엑셀 포맷) 북스 데이터 [엑셀의 첫 번째 행과 첫 번째 열] 두 번째 행 (기록 없음) 코드, 이름, 목록 또는 사전의 그룹 데이터를 읽고 싶습니다.IBN [3열(2열, 3열)] Aust [4열, 1열] UX test 134 [5열(2열, 3열)] ......

도서 자료

     Code     Name     IBN

아우스트

    UX         test1     34
   UZ         test2     345
   UN         test3     5654

미국

   UX         name1     567
  TG         nam2      123
  UM         name3     234

다음 코드를 사용하여 엑셀 데이터를 읽고 있습니다(Google의 일부 도움말).

        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 
       { countryName= p[0],
           bookCode= p.Field<string>("F2"),
           bookName= p.Field<string>("F3")
      };

위의 코드는 제가 "F2"를 사용하고 있고 제가 사용하고 있는 국가의 "코드"를 얻기에 좋지 않습니다 [0].국가별 코드와 이름을 얻으려면 무엇을 사용해야 합니까?

또한 제가 원하는 정보를 제공하지만 목록이나 사전, 수업 시간에 입력하는 방법이 없어 국가 이름으로 매개 변수를 전달하여 데이터를 얻을 수 있습니다.

간단히 말해서, 먼저 모든 데이터를 목록이나 사전에 저장한 다음 목록이나 사전을 호출하여 국가별로 데이터 필터를 가져올 수 있습니다.감사해요.

다음 두 가지 작업을 수행해야 합니다.

먼저 아래 표와 같이 첫 번째 행에 열 머리글이 있도록 스프레드시트를 다시 포맷해야 합니다.

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

둘째, Link 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"]
                };

오픈 소스 프로젝트에 대한 자세한 내용은 링크에서 엑셀 소개 비디오를 확인하십시오.

제안 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")
                       };
        }

제가 알기로는 필요한 속성을 포함하는 BookData 클래스를 만들 것을 제안합니다. 이 경우 Country, Code, Name 및 IBN.

그런 다음 Excel 항목으로 데이터 세트를 채웠으면 새 목록을 만들고 데이터 세트의 데이터 행을 순환하여 Excel 값을 목록에 추가합니다.

그런 다음 목록에서 Linkq를 다음과 같이 사용할 수 있습니다.

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

아니면 그런 비슷한 것.저는 비주얼 스튜디오를 가지고 있지 않습니다. 그리고 인텔리센스가 저를 망쳤습니다. 그래서 그렇습니다.>__>

언급URL : https://stackoverflow.com/questions/1485958/read-excel-using-linq

반응형