{"id":2955,"date":"2012-01-20T10:48:04","date_gmt":"2012-01-20T01:48:04","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/archives\/2955"},"modified":"2012-01-20T10:51:20","modified_gmt":"2012-01-20T01:51:20","slug":"excel-%e3%82%92-linq-%e3%81%a7%e6%a4%9c%e7%b4%a2%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95","status":"publish","type":"post","link":"http:\/\/www.moonmile.net\/blog\/archives\/2955","title":{"rendered":"Excel \u3092 LINQ \u3067\u691c\u7d22\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"<p>\n\u3088\u304f\u696d\u52d9\u306e\u5e33\u7968\u3092\u4f5c\u308b\u6642\u306f\u3001Excel \u306e\u96a0\u3057\u30b7\u30fc\u30c8\u3092\u4f7f\u3063\u3066\u300c\u5370\u5237\u753b\u9762\u300d\u3068\u300c\u30c7\u30fc\u30bf\u753b\u9762\u300d\u3092\u5206\u3051\u3066\u4f5c\u308a\u307e\u3059\u3002<br \/>\n\u76f4\u63a5\u5e33\u7968\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u66f8\u304d\u8fbc\u3093\u3067\u3082\u3044\u3044\u306e\u3067\u3059\u304c\u3001\n<\/p>\n<ul>\n<li>\u30bb\u30eb\u306e\u540d\u524d\u4ed8\u3051\u306e\u4e0d\u6574\u5408\u306a\u3069\u304c\u3084\u3084\u3053\u3057\u3044\u3002<\/li>\n<li>\u884c\u5217\u3092\u6307\u5b9a\u3059\u308b\u3068\u304d\u306a\u3093\u304b\u3001\u304b\u306a\u308a\u5927\u5909\u3002<\/li>\n<\/ul>\n<p>\n\u3068\u3044\u3046\u3053\u3068\u304c\u3042\u3063\u3066\u3001\u5225\u306b\u30c7\u30fc\u30bf\u7528\u306e\u30b7\u30fc\u30c8\u3092\u7528\u610f\u3057\u3066\u304a\u3044\u3066\u3001\u30bb\u30eb\u53c2\u7167\u3055\u305b\u308b\u3093\u3067\u3059\u3088\u306d\u3002\u305f\u3060\u3001\u3053\u306e\u30d1\u30bf\u30fc\u30f3\u3063\u3066\u3001\u884c\u6570\u304c\u5897\u3048\u308b\u3088\u3046\u306a\u30ec\u30dd\u30fc\u30c8\u306e\u5834\u5408\u306f\u3046\u307e\u304f\u3044\u304b\u306a\u304f\u3066\u3001\u7d50\u5c40\u306e\u3068\u3053\u308d\u30b3\u30fc\u30c9\u306e\u307b\u3046\uff08C#\/VB\uff09\u3067\u3001\u304c\u308a\u304c\u308a\u3068\u884c\u5217\u3092\u4f5c\u308a\u8fbc\u3093\u3060\u308a\u3057\u307e\u3059\u3002\n<\/p>\n<p>\n\u3055\u3066\u3001\u672c\u6765\u306f\u30c7\u30fc\u30bf\u306e\u66f8\u304d\u8fbc\u307f\u3092\u7d39\u4ecb\u3057\u305f\u3044\u3068\u3053\u308d\u306a\u306e\u3067\u3059\u304c\u3001OleDb \u30d7\u30ed\u30d0\u30a4\u30c0\u3063\u3066 entity data model \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u3058\u3083\u3093\u3001\u3068\u3044\u3046\u3053\u3068\u3067\u3061\u3087\u3063\u3068\u3052\u3093\u306a\u308a&#8230;\u3069\u3046\u3057\u305f\u3082\u306e\u304b\u3068\u601d\u3063\u3066\u3044\u305f\u3068\u3053\u308d\u3001\u7d50\u69cb\u7c21\u5358\u306b linq \u5b9f\u88c5\u304c\u51fa\u6765\u305d\u3046\u306a\u30bd\u30fc\u30b9\u3092\u898b\u3064\u3051\u307e\u3057\u305f\u3002\n<\/p>\n<p>\nUsing Linq with Excel sheets<br \/>\n<a href=\"http:\/\/geekswithblogs.net\/CodeSpeaker\/archive\/2009\/10\/04\/using-linq-with-excel-sheets.aspx\">http:\/\/geekswithblogs.net\/CodeSpeaker\/archive\/2009\/10\/04\/using-linq-with-excel-sheets.aspx<\/a>\n<\/p>\n<p>\n\u809d\u306f\u3001LinqToExcelProvider \u30af\u30e9\u30b9\u306e\u3068\u3053\u308d\u3067\u3001\u96e3\u3068\u3044\u3046\u3053\u3068\u306f\u306a\u3044\u3001\u5f93\u6765\u306e OLEDB \u63a5\u7d9a\u3092\u3057\u3066\u304b\u3089\u3001LINQ \u3067\u4f7f\u3048\u308b\u3088\u3046\u306a\u30ea\u30b9\u30c8\uff08EnumerableRowCollection<>\uff09\u3092\u8fd4\u3057\u3066\u3044\u308b\u3060\u3051\u306a\u3093\u3067\u3059\u306d\u3002\u306a\u308b\u307b\u3069\u3001\u3053\u308c\u3067\u5341\u5206\u3067\u3059\u3002\n<\/p>\n<p>\nDataTableExtensions.AsEnumerable \u30e1\u30bd\u30c3\u30c9 (System.Data)<br \/>\n<a href=\"http:\/\/msdn.microsoft.com\/query\/dev10.query?appId=Dev10IDEF1&#038;l=JA-JP&#038;k=k(SYSTEM.DATA.DATATABLEEXTENSIONS.ASENUMERABLE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&#038;rd=true\">http:\/\/msdn.microsoft.com\/query\/dev10.query?appId=Dev10IDEF1&#038;l=JA-JP&#038;k=k(SYSTEM.DATA.DATATABLEEXTENSIONS.ASENUMERABLE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&#038;rd=true<\/a>\n<\/p>\n<p>\nDataSet\/DataTable \u306e AsEnumerable \u30e1\u30bd\u30c3\u30c9\u306f\u3001\u62e1\u5f35\u30e1\u30bd\u30c3\u30c9\u3068\u3044\u3046\u8a33\u3067\u3001ver3.5 \u306e\u6642\u306b\u8ffd\u52a0\u3055\u308c\u305f\u3082\u306e\u3067\u3059\u3002\n<\/p>\n<p>\n\u7df4\u7fd2\u304c\u3066\u3089\u3001\u3061\u3087\u3063\u3068\u3060\u3051\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u63db\u3048\u305f\u306e\u304c\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u3059\u3002\n<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic partial class Form1 : Form\r\n{\r\n\tpublic Form1()\r\n\t{\r\n\t\tInitializeComponent();\r\n\t}\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ \u5185\u90e8\u30af\u30e9\u30b9\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tpublic class Book\r\n\t{\r\n\t\tpublic string ISBN { get; set; }\r\n\t\tpublic string Title { get; set; }\r\n\t\tpublic int Price { get; set; }\r\n\t}\r\n\r\n\tprivate void button1_Click(object sender, EventArgs e)\r\n\t{\r\n\t\tLinqToExcelProvider provider = new LinqToExcelProvider(@&amp;quot;app_data\\sampleData.xlsx&amp;quot;);\r\n\t\tvar items = from t in provider.GetWorkSheet(&amp;quot;book&amp;quot;)\r\n\t\t\t\t\twhere t&#x5B;&amp;quot;title&amp;quot;].ToString().IndexOf(&amp;quot;\u3072\u3068\u76ee&amp;quot;) &gt;= 0\r\n\t\t\t\t\tselect new Book\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tISBN = t&#x5B;&amp;quot;isbn&amp;quot;].ToString(),\r\n\t\t\t\t\t\tTitle = t&#x5B;&amp;quot;title&amp;quot;].ToString(),\r\n\t\t\t\t\t\tPrice = int.Parse(t&#x5B;&amp;quot;price&amp;quot;].ToString())\r\n\t\t\t\t\t};\r\n\t\tforeach (var it in items)\r\n\t\t{\r\n\t\t\tDebug.Print(&amp;quot;{0} {1}&amp;quot;, it.ISBN, it.Title);\r\n\t\t}\r\n\t\t\/\/ \u30d0\u30a4\u30f3\u30c9\u3067\u304d\u308b\u3088\u3046\u306b List \u306b\u5909\u63db\r\n\t\tdataGridView1.DataSource = items.ToList();\r\n\r\n\t}\r\n}\r\n\r\n\/\/\/ &lt;summary&gt;\r\n\/\/\/ Provides linq querying functionality towards Excel (xls) files\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class LinqToExcelProvider\r\n{\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Gets or sets the Excel filename\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\tprivate string FileName { get; set; }\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Template connectionstring for Excel connections\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\t\/\/ private const string ConnectionStringTemplate = &amp;quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;&amp;quot;;\r\n\t\/\/\/ Excel 2007 Connection String Samples - ConnectionStrings.com\r\n\t\/\/\/ http:\/\/www.connectionstrings.com\/excel-2007\r\n\tprivate const string ConnectionStringTemplate = &amp;quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\\&amp;quot;Excel 12.0 Xml;HDR=YES\\&amp;quot;;&amp;quot;;\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Default constructor\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\t\/\/\/ &lt;param name=&amp;quot;fileName&amp;quot;&gt;The Excel file to process&lt;\/param&gt;\r\n\tpublic LinqToExcelProvider(string fileName)\r\n\t{\r\n\t\tFileName = fileName;\r\n\t}\r\n\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Returns a worksheet as a linq-queryable enumeration\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\t\/\/\/ &lt;param name=&amp;quot;sheetName&amp;quot;&gt;The name of the worksheet&lt;\/param&gt;\r\n\t\/\/\/ &lt;returns&gt;An enumerable collection of the worksheet&lt;\/returns&gt;\r\n\tpublic IQueryable&lt;DataRow&gt; GetWorkSheet(string sheetName)\r\n\t{\r\n\t\t\/\/ Build the connectionstring\r\n\t\tstring connectionString = string.Format(ConnectionStringTemplate, FileName);\r\n\r\n\t\t\/\/ Query the specified worksheet\r\n\t\tOleDbDataAdapter da = new OleDbDataAdapter(string.Format(&amp;quot;SELECT * FROM &#x5B;{0}$]&amp;quot;, sheetName), connectionString);\r\n\r\n\t\t\/\/ Fill the dataset from the data adapter\r\n\t\tDataTable dt = new DataTable();\r\n\t\tda.Fill(dt);\r\n\r\n\t\t\/\/ Return the data table contents as a queryable enumeration\r\n\r\n\t\treturn dt.AsEnumerable().AsQueryable();\r\n\t}\r\n}\r\n<\/pre>\n<p><a href='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/01\/wpid-dworkblogimage20120120_01org.jpg'><img border='0' src='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/01\/wpid-dworkblogimage20120120_01thum.jpg'\/><\/a><\/p>\n<p>\n\u306e\u3088\u3046\u306a Excel \u3092\u7528\u610f\u3057\u3066\u304a\u3044\u3066\u3001\u30b7\u30fc\u30c8\u540d\u306f\u300cbook\u300d\u306b\u3057\u307e\u3059\u3002\n<\/p>\n<p>\n\u5b9f\u884c\u3059\u308b\u3068\u3001\u3053\u3093\u306a\u611f\u3058\n<\/p>\n<p><a href='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/01\/wpid-dworkblogimage20120120_02org.jpg'><img border='0' src='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2012\/01\/wpid-dworkblogimage20120120_02thum.jpg'\/><\/a><\/p>\n<p>\n\u3061\u306a\u307f\u306b\u300cMicrosoft.ACE.OLEDB\u300d\u306e\u300cACE\u300d\u306e\u90e8\u5206\u306f\u300cMicrosoft Access \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 \u30a8\u30f3\u30b8\u30f3\u300d\u306e\u7565\u3068\u306e\u3053\u3068\u3001\u4ee5\u4e0b\u306e\u3068\u3053\u308d\u3067\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\uff08\u3063\u3066\u3001visual studio 2010 \u304c\u5165\u3063\u3066\u3044\u306a\u3044\u3068\u5165\u3089\u306a\u3044\uff1f\uff09\n<\/p>\n<p>\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u8a73\u7d30 Microsoft Access \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 \u30a8\u30f3\u30b8\u30f3 2010 \u518d\u9812\u5e03\u53ef\u80fd\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<br \/>\n<a href=\"http:\/\/www.microsoft.com\/downloads\/ja-jp\/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d\">http:\/\/www.microsoft.com\/downloads\/ja-jp\/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d<\/a>\n<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3088\u304f\u696d\u52d9\u306e\u5e33\u7968\u3092\u4f5c\u308b\u6642\u306f\u3001Excel \u306e\u96a0\u3057\u30b7\u30fc\u30c8\u3092\u4f7f\u3063\u3066\u300c\u5370\u5237\u753b\u9762\u300d\u3068\u300c\u30c7\u30fc\u30bf\u753b\u9762\u300d\u3092\u5206\u3051\u3066\u4f5c\u308a\u307e\u3059\u3002 \u76f4\u63a5\u5e33\u7968\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u66f8\u304d\u8fbc\u3093\u3067\u3082\u3044\u3044\u306e\u3067\u3059\u304c\u3001 \u30bb\u30eb\u306e\u540d\u524d\u4ed8\u3051\u306e\u4e0d\u6574\u5408\u306a\u3069\u304c\u3084\u3084\u3053\u3057\u3044\u3002 \u884c\u5217\u3092\u6307\u5b9a\u3059\u308b\u3068\u304d &hellip; <a href=\"http:\/\/www.moonmile.net\/blog\/archives\/2955\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[23,39],"tags":[],"class_list":["post-2955","post","type-post","status-publish","format-standard","hentry","category-csharp","category-39"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/2955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=2955"}],"version-history":[{"count":2,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/2955\/revisions"}],"predecessor-version":[{"id":2957,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/2955\/revisions\/2957"}],"wp:attachment":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=2955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=2955"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=2955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}