Read Excel file as Data

Monday, December 24, 2007 11:03
Posted in category Uncategorized

לפני מספר שבועות התחבטתי בשאלה של קריאת קובץ אקסל, זה יכול להיות ייבוא של הקובץ או ממש קריאה שלו לצורך ביצוע פעולות.
סך הכל אקסל הוא כלי טלבאי נוח מאוד שלא מצריך ידע טכני רב ולפיכך יכול לשמש כמעין עורך תוכן טבלאי למערכות אחרות או לתהליכים פשוטים כמו זה שאני הזדקקתי לו.

ישנה דרך מאוד אלגנטית לקרוא קובץ אקסל בדוט נט – לקרוא אקסל כמו ספר פתוח או כמו DataSet פותר את בעיית ההתעסקות עם הקובץ או ייבוא קובץ CSV שזוהי הדרך הפשוטה יותר שבה נוקטים בדרך כלל.

הקוד הבא פותח קובץ אקסל כמו חיבור ל- DB ומאפשר לקבל ממנו את רשימת הטאבים (אלו שנמצאים למטה ומאפשרים לדפדף בין גליונות האקסל) וכמובן את הנתונים מכל טאב בצורה טבלאית – מה שמאפשר לנו לבצע פעולות SQL על האקסל בצורה נוחה מאוד.

הקוד הבא מקבל קובץ אקסל ושולף מטבלה מסויימת את הנתונים כ- DS:

     public void readTable(string excelFileName)
        {
            OleDbConnection conn;
            inData = new DataSet();
            string conStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFileName + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
            string[] ws = GetWorkSheetNames(conStr);
            conn = new OleDbConnection(conStr);
            OleDbDataAdapter da = new OleDbDataAdapter(@"SELECT * FROM [" + ws[0] + "]",conn);
            da.Fill(inData);
        }

כדי לקבל את רשימת הגליונות בקובץ האקסל ולבחור גיליון ספציפי:

       private string[] GetWorkSheetNames(string _connectionstring)
        {
            OleDbConnection _conn = new OleDbConnection(_connectionstring);
            string[] _worksheetnames = null;
            string _error = "";

            try
            {
                _conn.Open();

                // Get all of the Table names from the Excel workbook
                DataTable dt = _conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                _worksheetnames = new string[dt.Rows.Count];

                //Add the Table name to the string array.
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    _worksheetnames[i] = (string)dt.Rows[i]["TABLE_NAME"];
                }
            }
            catch (Exception e)
            {
                _error += e.Message + "<br /><br />";
            }
            finally
            {
                _conn.Close();
            }

            return _worksheetnames;
        }

מומלץ – אלגנטי ומקל על החיים !

קובי מגנזי, Kobi Magnezi

You can leave a response, or trackback from your own site.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

* Copy this password:

* Type or paste password here:

863 Spam Comments Blocked so far by Spam Free Wordpress