none
Формат Даты после открытия Excel сохраняется как строка

    Вопрос

  • Доброго времени суток. 

    Открываю  в Excel-е текстовый файл, через C#  и microsoft.office.interop.excel:

                    ExcelWorkbook = ExcelWorkbooks.Open(
            OutFile,               // Filename
            Type.Missing,
            Type.Missing,
            Excel.XlFileFormat.xlCSV,   // Формат
            Type.Missing,
            Type.Missing,
            Type.Missing,
            Type.Missing,
            ";",          // Разделитель
            Type.Missing,
            Type.Missing,
            Type.Missing,
            Type.Missing,
            Type.Missing,
            Type.Missing);

    Файл открывается.

    Время отображается как время справа.

    А дата отображается как строка слева. 

    Скрин:

    После двойного щелчка дата становится датой смещается  вправо.

    Или если использую форматирование, например:

    SetFormat(ExcelWorksheet.Columns[dat], "NumberFormat", "dd.MMM.yyyy");

           private void SetFormat(object ob, string pr, string val)
            {
                // to avoid locale issues, use reflection
                obj.GetType().InvokeMember(pr, System.Reflection.BindingFlags.Public
                | System.Reflection.BindingFlags.Instance
                | System.Reflection.BindingFlags.SetProperty,
                null,
                ob,
                new object[] { val},
                System.Globalization.CultureInfo.GetCultureInfo("en-US")); 
            }

    , то форматирование применяется только после двойного щелчка.

     Как сделать чтобы формат даты устанавливался автоматически правильно, после открытия Excel? (Что бы дата смещалась в право).

    14 апреля 2019 г. 11:13

Ответы

  • Получилось нормально форматировать текстовые файлы используя метод "OpenText".Нужно правильно заполнить object fieldInfo,перед открытием файла.(Проблема была с обрезанием первого нуля, длинными числами и датой).

    Пример:

     object[] fieldInfo= new object[ArrayField.Count()] ;


                for (int i = 0; i < ArrayField.Count(); i++)
                {
                    if ((ArrayField[i] == 14) || (ArrayField[i] == 21)    |
                    {
                        fieldInfo[i] = new object[] { i, Excel.XlColumnDataType.xlTextFormat };
                    }
                    else
                    {
                        if (ArrayField[i] == 37)
                            fieldInfo [i] = new object[] { i, Excel.XlColumnDataType.xlDMYFormat};
                        else
                        {
                            fieldInfo[i] = new object[] { i, Excel.XlColumnDataType.xlGeneralFormat };
                        }                 
                    }                               

               ExcelWorkbooks.OpenText(

                OutFile,

                Type.Missing,

                1,           

    //С первой строки

                Excel.XlTextParsingType.xlDelimited,

    //Текст с разделителями


                Excel.XlTextQualifier.xlTextQualifierDoubleQuote,

    //Признак окончания разбора строки


                Type.Missing,         

    //Разделители одинарные


                Type.Missing,         

    //Разделители :Tab


               

    true,         //Semicolon


                Type.Missing,        

    //Comma


                Type.Missing,        

    //Space


                Type.Missing,        

    //Other


                Type.Missing, 

    //OtherChar


                fieldInfo,

                Type.Missing,

                Type.Missing,

                Type.Missing,

                Type.Missing,

                Type.Missing);

    • Помечено в качестве ответа Y_VS 23 апреля 2019 г. 14:17
    23 апреля 2019 г. 14:17