דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. בעיה בפתיחת קובץ CSV באקסל

בעיה בפתיחת קובץ CSV באקסל

מתוזמן נעוץ נעול הועבר ארכיון code613m
8 פוסטים 3 כותבים 538 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • A מנותק
    A מנותק
    avr416
    כתב ב נערך לאחרונה על ידי
    #1

    אני מאפשר לייצא קובץ עם נתונים של התוכנה לפורמט CSV לקריאה באקסל.
    כאשר אני מגדיר לתכנה לשמור אותו עם ".csv" בסוף אז זה נפתח אוט' באקסל, אבל הבעיה שכל הנתונים נמצאים בתא אחד והוא לא מזהה שהוא צריך לחלק אותם לעמודות לפי הפסיקים.
    כאשר אני לא מגדיר את הסיומת של הקובץ, אז המחשב לא יודע דרך איזה תכנה לפתוח אותו, וכאשר אני בוחר באקסל ועושה שם המרה מפורשת אז הכל מצויין.
    מישהו יודע האקסל לא יודע לזהות אותו בצורה אוט', או מה עושים כדי שזה יעבוד אוט'?

    תודה רבה!

    פורסם במקור בפורום CODE613 ב16/08/2015 22:15 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • clickoneC מנותק
      clickoneC מנותק
      clickone
      כתב ב נערך לאחרונה על ידי
      #2

      מה המבנה של הCSV שלך?
      אתה צריך להפריד את העמודות עם פסיק.

      פורסם במקור בפורום CODE613 ב16/08/2015 22:17 (+03:00)

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

      תגובה 1 תגובה אחרונה
      1
      • A מנותק
        A מנותק
        avr416
        כתב ב נערך לאחרונה על ידי
        #3

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

        השתמשתי במחלקה הבאה ליצירת CSV (מצאתי אותה ב"גלישת מחסנית" :lol:)

        public class CsvExport<T> where T : class
            {
                public List<T> Objects;
        
                public CsvExport(List<T> objects)
                {
                    Objects = objects;
                }
        
                public string Export()
                {
                    return Export(true);
                }
        
                public string Export(bool includeHeaderLine)
                {
        
                    StringBuilder sb = new StringBuilder();
                    //Get properties using reflection.
                    IList<PropertyInfo> propertyInfos = typeof(T).GetProperties();
        
                    if (includeHeaderLine)
                    {
                        //add header line.
                        foreach (PropertyInfo propertyInfo in propertyInfos)
                        {
                            sb.Append(propertyInfo.Name).Append(",");
                        }
                        sb.Remove(sb.Length - 1, 1).AppendLine();
                    }
        
                    //add value for each property.
                    foreach (T obj in Objects)
                    {
                        foreach (PropertyInfo propertyInfo in propertyInfos)
                        {
                            sb.Append(MakeValueCsvFriendly(propertyInfo.GetValue(obj, null))).Append(",");
                        }
                        sb.Remove(sb.Length - 1, 1).AppendLine();
                    }
        
                    return sb.ToString();
                }
        
                //export to a file.
                public void ExportToFile(string path)
                {
                    File.WriteAllText(path,Export(),Encoding.Unicode);
                }
        
                //export as binary data.
                public byte[] ExportToBytes()
                {
                    return Encoding.UTF8.GetBytes(Export());
                }
        
                //get the csv value for field.
                private string MakeValueCsvFriendly(object value)
                {
                    if (value == null) return "";
                    if (value is Nullable && ((INullable)value).IsNull) return "";
        
                    if (value is DateTime)
                    {
                        if (((DateTime)value).TimeOfDay.TotalSeconds == 0)
                            return ((DateTime)value).ToString("yyyy-MM-dd");
                        return ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss");
                    }
                    string output = value.ToString();
        
                    if (output.Contains(",") || output.Contains("\""))
                        output = '"' + output.Replace("\"", "\"\"") + '"';
        
                    return output;
        
                }
            }
        

        פורסם במקור בפורום CODE613 ב16/08/2015 22:27 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • clickoneC מנותק
          clickoneC מנותק
          clickone
          כתב ב נערך לאחרונה על ידי
          #4

          תוכל להעלות קובץ CSV לדוגמא?

          פורסם במקור בפורום CODE613 ב16/08/2015 23:03 (+03:00)

          אין טסט כמו פרודקשן.

          המייל שלי urivpn@gmail.com

          תגובה 1 תגובה אחרונה
          0
          • A מנותק
            A מנותק
            avr416
            כתב ב נערך לאחרונה על ידי
            #5

            כן
            הנהדוגמא1.csv
            את ההוא שהוא בלי סיומת CSV האתר לא נותן לי להעלות :lol:
            (כנראה מטעמי אבטחה??)
            תודה רבה

            פורסם במקור בפורום CODE613 ב16/08/2015 23:15 (+03:00)

            תגובה 1 תגובה אחרונה
            0
            • רחמיםר מנותק
              רחמיםר מנותק
              רחמים מורחק
              כתב ב נערך לאחרונה על ידי
              #6

              נראה לי שצריך לקודד את הקובץ עם Encoding.Default

              פורסם במקור בפורום CODE613 ב17/08/2015 16:30 (+03:00)

              תגובה 1 תגובה אחרונה
              3
              • A מנותק
                A מנותק
                avr416
                כתב ב נערך לאחרונה על ידי
                #7

                @רחמים

                נראה לי שצריך לקודד את הקובץ עם Encoding.Default

                מעולה!! זה פתר את הבעיה!!
                וסתם ליידע כללי מה ההבדל בין encoding.Default ל encoding.Unicode?
                תודה רבה!

                פורסם במקור בפורום CODE613 ב17/08/2015 17:29 (+03:00)

                תגובה 1 תגובה אחרונה
                0
                • רחמיםר מנותק
                  רחמיםר מנותק
                  רחמים מורחק
                  כתב ב נערך לאחרונה על ידי
                  #8

                  ביוניקוד כל תו מקבל 16 סיביות ואילו ה Default הוא למעשה קידוד שנקרא windows-1255 ושם כל תו מקבל 8 סיביות
                  ראה בהרחבה כאן

                  פורסם במקור בפורום CODE613 ב17/08/2015 17:41 (+03:00)

                  תגובה 1 תגובה אחרונה
                  1

                  בא תתחבר לדף היומי!
                  • התחברות

                  • אין לך חשבון עדיין? הרשמה

                  • התחברו או הירשמו כדי לחפש.
                  • פוסט ראשון
                    פוסט אחרון
                  0
                  • דף הבית
                  • קטגוריות
                  • פוסטים אחרונים
                  • משתמשים
                  • חיפוש
                  • חוקי הפורום