-
@אוריי אמר במחפש קוד של c# להפעלת מאקרו vba:
משום מה לא הצלחתי להסתדר איתם
מילים אלו "משום מה" "לא מסתדר" לא עוזרים לנו לעזור לך... (טוב, האמת היא שאני בכל מקרה לא יודע מה התשובה). נסה לשאול שאלת חכם ולא שאלת תם.
תפרק את הבעיה לרכיבים.
שלב א
יש אפשרות להריץ את האקסל ברקע ולשלוט בו. האם אתה יודע איך עושים את זה ב-#C? האם אתה יודע איך לעשות את זה בשפה אחרת? נראה לי שזה אמור להיות אפשרי ב-VBA מתוכנת אקסס גם כן. האם ניסית ב-VBA? עבד לך? ניסת ב-#C? עבד לך?שלב ב, זה להריץ את המאקרו.
איך נסית? איזה שגיאה קיבלת? -
@yossiz
ניסיתי בקוד vba בתוך קובץ vbs וזה עובד הבעיה היא שהוא לא סוגר את האקסל ברקע לאחר הפעולה (כך שלאחר כמה פתיחות השרת לא זז)
א. אני צריך שהבקשה תגיע מקובץ קוד כי זה אמור להגיע לאחר פעולה
ב. אני לא יכול לבקש מתוך אקסס כי א"כ אני מוכרך לפתוח את האקסס בשביל זה והרי אני רוצה שזה יעבוד באופן אוטומטי לחלוטין...
ג. חוץ מזה יש לי קוד c# שעושה לי את הפעולה הקודמת של הורדת קבצים משרת ftp וב"ה עובד מעולה ... כ"כ חיפשתי ג"כ קוד המשך לפעולה הבאה במקום לסרבל את המערכת...לגבי הניסיונות שלי
אני הכנסתי את הקוד הבא והוא לא מוצא את המחלקה שלExcel
public void WebTest_CodedStep() { // Object for missing (or optional) arguments. object oMissing = System.Reflection.Missing.Value; // Create an instance of Microsoft Excel Excel.ApplicationClass oExcel = new Excel.ApplicationClass(); // Make it visible oExcel.Visible = true; // Define Workbooks Excel.Workbooks oBooks = oExcel.Workbooks; Excel._Workbook oBook = null; // Get the file path string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); path = path + "\\Worksheet02.csv"; //Open the file, using the 'path' variable oBook = oBooks.Open(path, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); // Run the macro, "First_Macro" RunMacro(oExcel, new Object[]{"Worksheet01.xlsm!First_Macro"}); // Quit Excel and clean up. oBook.Close(false, oMissing, oMissing); System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook); oBook = null; System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks); oBooks = null; oExcel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel); oExcel = null; //Garbage collection GC.Collect(); } private void RunMacro(object oApp, object[] oRunArgs) { oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs); }
במחשבה שניה לא בטוח שהקוד הזה יסגור לי את האקסל לאחר הפעולה..
-
@אוריי אמר במחפש קוד של c# להפעלת מאקרו vba:
הבעיה היא שהוא לא סוגר את האקסל ברקע לאחר הפעולה
Application.Quit
והוא לא מוצא את המחלקה של Excel
צריך להוסיף למעלה
using Microsoft.Office.Interop.Excel;
ולהוסיף Reference בפרוייקט ל-DLL של זה.
זה בגדול, יותר בפרטות אני לא יודע.
-
-
@aharon-0
אני יעשה לך קצת סדר
עם הפאוורשאל לא הסתדרתי
אז עברתי להשתמש ב #C
תכלס יש לי קוד #C שמוריד בהצלחה את כל הקבצים מה FTP
חוץ מזה בניתי קובץ VBS שמפעיל את המאקרו של האקסל
מה שכרגע חסר לי הוא להפעיל את ה VBS דרך ה#C
מקווה שהייתי ברור... -
@אוריי
דוגמא שמצאתי באינטרנט(אני מסמארטפון וקשה להקליד):
Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.WorkingDirectory = @"c:\scripts"; //<---very important
scriptProc.StartInfo.Arguments ="//B //Nologo vbscript.vbs";
scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //prevent console window from popping up
scriptProc.Start();
scriptProc.WaitForExit(); // <-- Optional if you want program running until your script exit
scriptProc.Closeעדיין חסר בדיקת ExitCode שאתה יכול להחזיר מ VBS שאומר אם ההרצה נכשלה או הצליחה.
ואפשר להוסיף קריאה של הדפסות ל console שתוכל לטפל באירועים. -