מה אני יודעת לעשות ?
כל דבר שקשור לוורדפרס כל עוד אינו מצריך יכולות עיצוב.
דוגמאות ניתן לראות בתיק העבודות שלי או ברחבי הבלוג עצמו.
ניתן ליצור איתי קשר במיייל: webmaster@dakars.info
מה שבעצם הייתי צריכה, כשהתחלתי, היה מידע מרוכז עם דוגמאות על איך עובדים עם קבצים דרך ויז’ואל בייסיק. מצאתי בדרך די הרבה עזרה בפורומים, ביוטיוב, באתרי העזרה של מייקרוסופט, אבל כל דבר לקח שעות והיה באנגלית. מה שאני מנסה לעשות בסדרת הפוסטים הזו, היא לקצר את זמן החיפוש, לייעל את העבודה וכמובן – לעשות את זה בעברית. בסוף כל פוסט אצרף רשימה של לינקים מתוך הפייבוריטס שצברתי בזמן שחיפשתי. למי שתרצה מידע נוסף. מיותר לציין שאני אשמח, אגיל ואדוץ לכל הערה, תיקון, השגה ומידע נוסף שיש לכן להוסיף. בכל מה שקשור לויבי אני כל הזמן לומדת. שנתחיל?
הקוד לפתיחת קובץ:
1 2 3 4 5 6 7 8 9 10 11 | Dim objExcel As Excel.Application Dim ObjBook As Excel.Workbook Dim objSheet As Excel.Worksheet objExcel = New Excel.Application ' בהנחה שידוע שם הקובץ אותו רוצות לפתוח ObjBook = objExcel.Workbooks.Open(sFileName) 'בדיקה שאכן נפתח איזשהו קובץ If (ObjBook IsNot Nothing) Then objSheet = ObjBook .Worksheets(1) 'בחירה בגיליון שאותו רוצות פעיל- גיליון אחד בדוגמה |
כאשר רוצים לפתוח את החלון המאפשר בחירה איזה קובץ לפתוח, ניתן להעזר בפונקציה הבאה:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Public Function GetFileName(ByVal bOpenDialog As Boolean, ByVal defPath As String) As String Dim FileName As String FileName = "" If bOpenDialog Then 'יצירת אינסטנס לאובייקט מסוג פתיחת חלון קבצים Dim fdlg As OpenFileDialog = New OpenFileDialog() 'כאן יש להכניס את הנתיב הדיפולטי לפתיחת החלון fdlg.InitialDirectory = defPath 'איזה סוג קבצים על החלון להציג fdlg.Filter = "xls files (*.xls)|*.*|All files (*.*)|*.*" fdlg.FilterIndex = 2 fdlg.RestoreDirectory = True 'אם חוזר אוקי אז שם הקובץ הוא הנבחר If fdlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then FileName = fdlg.FileName() End If Return FileName End Function |
כדי לשמור את הקובץ, אפשר להשתמש בשגרה הבאה:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Public Sub SaveFileAsExcel(ByVal fileDetails) Dim objExcel As Excel.Application Dim ObjWorkbook As Excel.Workbook objExcel = New Excel.Application ObjWorkbook = objExcel.Workbooks.Open(fileDetails) If (ObjWorkbook IsNot Nothing) Then Try ObjWorkbook.SaveAs(fileDetails, Excel.XlFileFormat.xlWorkbookNormal) Catch exp As Exception End Try End If ObjWorkbook.Close() ObjWorkbook = Nothing objExcel.Quit() objExcel = Nothing End Sub |
בדיקה האם הקובץ כבר פתוח כרגע במערכת, על ידי שליחת שם הקובץ לפונקציה הבאה. הפונקציה מחזירה TRUE אם הקובץ פתוח, FALSE אם לא:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | Public Function IsFileOpen(ByVal FileName As String) As Boolean Dim FileNum As Integer Dim ErrNum As Integer Dim V As Object If Trim(FileName) = vbNullString Then Return False 'קובץ לא קיים V = Dir(FileName, vbNormal) If IsError(V) = True Or V = vbNullString Then Return False FileNum = FreeFile() Err.Clear() ' ניסיון לפתוח את הקובץ ולנעול אותו. FileOpen(FileNum, FileName, OpenMode.Input, OpenAccess.Default, OpenShare.LockRead) ErrNum = Err.Number FileClose(FileNum) ' לסגור את הקובץ. On Error GoTo 0 Select Case ErrNum Case 0 ' הקובץ סגור. Return False Case 75 ' הקובץ פתוח. Return True Case Else ' שגיאה כלשהי קרתה נניח שהקובץ פתוח. Return True End Select End Function |
קישורים נוספים לעבודה עם קבצים של אקסל שיכולים לעזור:
מדריך ויבי באנגלית
msdn – Automate Office Excel 2007 Reports with Visual Basic 2005
File Operations in Visual Basic (By John Smiley)
MS Help – How to automate Microsoft Excel from Visual Basic
נהניתם ? הרשמו לעדכוני RSS !

שמי חנית כהן, אני בת 33 ואשת מחשבים משנת 93.
אני לא מספיק משופשף בתכנות לאקסל, אבל נראה לי מוזר שאת יוצרת מחדש אובייקט EXCEL.Application כשהקובץ ממילא כבר פתוח ואת רק רוצה לשמור אותו. לדעתי את אמורה לעשות את זה עם ActiveWorkbook או שם דומה ולהכניס אותו ישר לobjWorkbook, בלי שום objExcel.
נכון. במקרה הספציפי שלי מה שאני עושה זה פורסת את הנתונים מכמה קבצים שמתקבלים ונשמרים אצל המשצנש, ויוצרת קובץ חדש שמאגד את הנתונים האלה אחרי שהם עברו עיבוד. אבל אם מה שעושים זה לשמור את אותו קובץ שכבר פתוח – אז כן. אין צורך לייצר אובייקט חדש.
מה שכן כדאי, אולי לבדוק, אם רוצים להשתמש באותו גיליון עבודה לאורך כל התוכנית, זה שהאובייקט מוגדר גלובלית ולא לוקלית. לא ניסיתי ולכן אני לא ממש יודעת.