חיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv
-
@shraga הוא מתכנת, כך שהוא צריך לסדר לעצמו אבל הוא חשב שיש כבר משהו מוכן.
אני יותר הייתי ממליץ על AutoHotKey ודומיו, אבל אני לא מכיר מספיק.
הכי טוב זה לכתוב קוד שעושה את העבודה, לסגור את זה כתוכנה שמקבלת ארגומנט קובץ, ולהוסיף את זה לקליק ימני של .xlsx.
את החלק האחרון אני לא יודע בדיוק איך מבצעים. -
ראשית תודות
@חגי על הדרך כיצד להצמיד את זה ל'קליק הימני'
@shraga על הקישורים המאוד רלוונטיים
@dovid על האמון, האמונה, וההכוונהוהרי הפתרון שעשיתי
יצרתי שני קבצים בתיקייה
(הפעלה ע"י הקובץ bat)- בשם: excel-to-csv.bat
FOR /f "delims=" %%i IN ('DIR %1 /b') DO ( cscript to-csv.vbs "%%i" "%%~ni.csv" )
- בשם: to-csv.vbs
if WScript.Arguments.Count < 2 Then WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>" Wscript.Quit End If csv_format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1)) Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.SaveAs dest_file, csv_format oBook.Close False oExcel.Quit
זה כרגע פעיל רק מהתיקייה שבה הקבצים נמצאים (בדר"כ בהורדות..)
וזה כרגע מספק אותי.... -
@Whenever כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
למה להגביל אותו שיעבוד רק משני קבצי אקסל ומעלה?
למה אתה חושב?
אצלי זה עובד גם על קובץ בודד@Whenever כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
לי זה עושה באג שזה יוצר גם שני קבצי CSV עם התוכן של הBAT וVBS.
כאשר אתה מריץ את הקובץ ישירות בתיקייה
זה אכן כפי שתארתאבל אני מפעיל את זה ב'קליק ימני' (shell:sendto )
ואז זה עובד תקין
וממיר רק את הקובץ הרלוונטי בעותק אחד@Whenever כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
אני חושב להפוך את סקריפט שימיר CSV לאקסל. זה יהיה לי שימושי.
אדרבה, נשמח לשיתוף
אתה גם מוזמן לשפר ולייעל את הקוד הנוכחי (שאין לי כל קשר אליו)
כגון: שאם יש שני גיליונות, זה יצור שני קבצים
ושזה יעבוד בצורה גלובלית בכל סייר הקבצים -
@shraga כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
אולי מישהו יתנדב לסדר לך משהו מושלם.
@dovid כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
את החלק האחרון אני לא יודע בדיוק איך מבצעים.
@Whenever כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
אני חושב להפוך את סקריפט שימיר CSV לאקסל. זה יהיה לי שימושי.
אחרי ש @mekev עשה עבודה יפה, אני מתנדב בשמחה להוסיף את השיפורים שלי:
סקריפט batch משופר להמרה דו כיוונית (Excel<->Csv):
@echo off if /i [%2]==[csv] goto TryConvert if /i [%2]==[xlsx] goto TryConvert echo Unsupported output format specified: %2 exit /b :TryConvert echo Converting file %1 to %2 format, please wait... cscript /nologo "%~dp0ExcelCsvConvertorScript.vbs" "%~dpnx1" "%~dpn1.%2" %2 echo Done!
סקריפט VB משופר להמרה דו כיוונית:
if WScript.Arguments.Count <> 3 Then Wscript.Echo "Error: invalid number of arguments specified." & vbNewline WScript.Echo "Usage: ExcelCsvConvertor <InputFileName> <OutputFileName> <OutputFormat>" & vbNewline WScript.Echo "Example: ExcelCsvConvertor input.xlsx output.csv csv" Wscript.Quit End If InputFileName = Wscript.Arguments.Item(0) OutputFileName = WScript.Arguments.Item(1) OutputFormat = lcase(WScript.Arguments.Item(2)) Select Case OutputFormat Case "csv" XlFileFormatValue = 62 Case "xlsx" XlFileFormatValue = 51 Case Else Wscript.Echo "Unsupported output format specified: " & OutputFormat Wscript.Quit End select With CreateObject("Excel.Application") With .Workbooks.Open(InputFileName) .SaveAs OutputFileName, XlFileFormatValue .Close False End With .Quit End With
קובץ להתקנה והסרה קלה מתפריט ההקשר (לחצן ימני):
@echo off set convertor_path=%~dp0ExcelCsvConvertor.cmd cls echo ========================================================================== echo ExcelCsvConvertor: Context menu setup echo ========================================================================== echo. echo [1] Install : Adds "Convert to CSV/Excel" options to context menu echo [2] Uninstall : Removes "Convert to CSV/Excel" options from context menu echo [Q] Quit echo. choice /C 12Q /T 1000 /D Q /N /M "Please select an option: " IF [%errorlevel%]==[1] GOTO Install IF [%errorlevel%]==[2] GOTO Uninstall exit /b :Install echo Installing... REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.xlsx\shell\ConvertToCSV /f /d "Convert to CSV..." REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.xlsx\shell\ConvertToCSV\command /f /d "\"%convertor_path%\" \"%%1\" csv" REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.csv\shell\ConvertToExcel /f /d "Convert to Excel..." REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.csv\shell\ConvertToExcel\command /f /d "\"%convertor_path%\" \"%%1\" xlsx" goto Done :Uninstall echo Uninstalling... REG DELETE HKEY_CLASSES_ROOT\SystemFileAssociations\.xlsx\shell\ConvertToCSV /f REG DELETE HKEY_CLASSES_ROOT\SystemFileAssociations\.csv\shell\ConvertToExcel /f goto Done :Done echo Done! pause
הערות:
- את ההתקנה יש להפעיל עם הרשאות מנהל
- מיקום הסקריפטים מוטמע ברישום בזמן ההתקנה.
אם משנים את מיקום הסקריפטים לאחר ההתקנה, נדרש להפעיל את ההתקנה שוב.
והנה כל החבילה להורדה: (הערה: עיין בהמשך האשכול לגרסה משופרת 0.2)
ExcelCsvConvertor.cmd
ExcelCsvConvertorScript.vbs
Setup (run as Administrator).cmd -
אלוף!
למה זה לא עובד לי בלי ההתקנות?
עשיתי קובץ VBS עם הקוד שלך וקראתי לו ExcelCsvConvertorScript.vbs
עשיתי קובץ BAT עם הקוד שלך וקראתי לו excel-to-csv
שמתי בתיקייה XLXS וגם CVA
ניסיתי להפעיל את הBAT כרגיל וגם כמנהל וכלום.
כשהפעלתי כמנהל נפתח לרגע החלון של ה CMD אבל בתיקייה לא קרה כלום.האם זה חייב התקנה?
תודה רבה על ההשקעה!
-
-
@dovid כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
@OdedDvir תודה! למה צריך את הbat?
אני מניח שכוונתך לראשון.
אתה צודק, האמת היא שאפשר לוותר עליו, ולקרוא ישר לסקריפט מתוך הרישום.
פשוט נצטרך לבצע את שינוי הסיומת של קובץ הפלט גם בסקריפט.
נחכה לשדרוג לגרסה 0.2 -
@OdedDvir מ-ד-ה-י-ם
תוספת קטנה לקוד
(בקוד שהבאת, במידה ויש יותר מגליון אחד בקובץ xlsx, מומר הגליון הפעיל בלבד [לא הראשון])בקוד הזה במידה ויש יותר מגליון אחד
נוצר קובץ CSV עבור כל גליוןexcelcsvconvertor.cmd
@echo off if /i "%~2"=="csv" goto TryConvert if /i "%~2"=="xlsx" goto TryConvert echo Unsupported output format specified: %2 exit /b :TryConvert echo Converting file %1 to %2 format, please wait... cscript /nologo "%~dp0ExcelCsvConvertorScript.vbs" "%~dpnx1" "%~n1" %2 echo Done!
excelcsvconvertorscript.vbs
If WScript.Arguments.Count <> 3 Then WScript.Echo "Error: invalid number of arguments specified." & vbNewline WScript.Echo "Usage: ExcelCsvConvertor <InputFileName> <OutputFileName> <OutputFormat>" & vbNewline WScript.Echo "Example: ExcelCsvConvertor input.xlsx output.csv csv" WScript.Quit End If InputFileName = WScript.Arguments.Item(0) OutputFileName = WScript.Arguments.Item(1) OutputFormat = LCase(WScript.Arguments.Item(2)) OutputFolder = Left(InputFileName, InStrRev(InputFileName, "\")) Select Case OutputFormat Case "csv" XlFileFormatValue = 6 OutputFileExtension = ".csv" Case "xlsx" XlFileFormatValue = 51 OutputFileExtension = ".xlsx" Case Else WScript.Echo "Unsupported output format specified: " & OutputFormat WScript.Quit End Select Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(InputFileName) For Each objWorksheet In objWorkbook.Worksheets objWorksheet.SaveAs OutputFolder & OutputFileName & "_" & Replace(objWorksheet.Name, " ", "") & OutputFileExtension, XlFileFormatValue Next objWorkbook.Close False objExcel.Quit
הערה: נערך ע"י בינה מלאכותית, אבל נבדק ועובד תקין
-
@OdedDvir כתב בחיפוש תוכנה: המרת קובץ אקסל (xlsx) לcsv:
נחכה לשדרוג לגרסה 0.2
הנה גרסה 0.2 שדורשת רק שני קבצים (קרדיט ל-@dovid על ההערה)
סקריפט vb
if WScript.Arguments.Count <> 2 Then Wscript.Echo "Error: invalid number of arguments specified." & vbNewline WScript.Echo "Usage: ExcelCsvConvertor <InputFileName> <OutputFormat>" & vbNewline WScript.Echo "Example: ExcelCsvConvertor input.xlsx csv" Wscript.Quit End If InputFileName = Wscript.Arguments.Item(0) OutputFormat = lcase(WScript.Arguments.Item(1)) Select Case OutputFormat Case "csv" XlFileFormatValue = 62 Case "xlsx" XlFileFormatValue = 51 Case Else Wscript.Echo "Unsupported output format specified: " & OutputFormat Wscript.Quit End select With CreateObject("Scripting.FileSystemObject") OutputFileName = .GetBaseName(InputFileName) & "." & OutputFormat InputFileName = .GetAbsolutePathName(InputFileName) OutputFileName = .GetParentFolderName(InputFileName) & "\" & OutputFileName End With WScript.Echo "Converting: " & InputFileName & " to " & OutputFormat & ": " & OutputFileName With CreateObject("Excel.Application") With .Workbooks.Open(InputFileName) .SaveAs OutputFileName, XlFileFormatValue .Close False End With .Quit End With
קובץ התקנה
@echo off set convertor_path=%~dp0ExcelCsvConvertor.vbs cls echo ========================================================================== echo ExcelCsvConvertor: Context menu setup echo ========================================================================== echo. echo [1] Install : Adds "Convert to CSV/Excel" options to context menu echo [2] Uninstall : Removes "Convert to CSV/Excel" options from context menu echo [Q] Quit echo. choice /C 12Q /T 1000 /D Q /N /M "Please select an option: " IF [%errorlevel%]==[1] GOTO Install IF [%errorlevel%]==[2] GOTO Uninstall exit /b :Install echo Installing... REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.xlsx\shell\ConvertToCSV /f /d "Convert to CSV..." REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.xlsx\shell\ConvertToCSV\command /f /d "cscript /nologo \"%convertor_path%\" \"%%1\" csv" REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.csv\shell\ConvertToExcel /f /d "Convert to Excel..." REG ADD HKEY_CLASSES_ROOT\SystemFileAssociations\.csv\shell\ConvertToExcel\command /f /d "cscript /nologo \"%convertor_path%\" \"%%1\" xlsx" goto Done :Uninstall echo Uninstalling... REG DELETE HKEY_CLASSES_ROOT\SystemFileAssociations\.xlsx\shell\ConvertToCSV /f REG DELETE HKEY_CLASSES_ROOT\SystemFileAssociations\.csv\shell\ConvertToExcel /f goto Done :Done echo Done! pause
כל החבילה v0.2:
ExcelCsvConvertor.vbs
Setup (run as Administrator).cmd@mekev הזריז הקדים אותי, אבל אני משאיר לו לשדרג את הפיצ'ר שלו לגרסה 0.3