Vineet_2109 Ответов: 3

Импорт данных Excel с форматированием ячеек (т. е. дата не является форматом предстоящей даты )


Ячейка листа Excel имеет дату как "11-30-11", но когда я импортирую ее, она преобразуется в "78608". Поэтому я хочу импортировать эти данные с датой "11-30-11".

Вы можете найти эту строку после первой части цикла


 private void processExcel(string filename)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;

            var missing = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass();

            xlWorkBook = xlApp.Workbooks.Open(filename, false, true, missing, missing, missing, true,
                Excel.XlPlatform.xlWindows, missing, false, false, 0, false, true, 0);
            
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            Excel.Range xlRange = xlWorkSheet.UsedRange;
            Array myValues = (Array)xlRange.Cells.Value2;

            int vertical = myValues.GetLength(0);
            int horizontal = myValues.GetLength(1);

            DataTable mainDt = new DataTable();
            DataTable MiscDt = new DataTable();

            // must start with index = 1
            // get header information
            for (int i = 1; i <= horizontal; i++)
            {
                mainDt.Columns.Add(new DataColumn(myValues.GetValue(1, i).ToString()));
            }

            // Get the row information
            for (int a = 2; a <= vertical; a++)
            {


//SEE Below line for QUESTION..

                //Excel sheet cell has data as "11-30-11" but when i import it convert to "78608".  So i want import those data with data as "11-30-11".  


                string x = Convert.ToString(myValues.GetValue(a, 2));
                object[] poop = new object[horizontal];
                //if (x == "11-30-11")
                //{                    
                    for (int b = 1; b <= horizontal; b++)
                    {                        
                        poop[b - 1] = myValues.GetValue(a, b);
                    }
                    DataRow row = mainDt.NewRow();
                    row.ItemArray = poop;
                    mainDt.Rows.Add(row);
                //}                
            }

            // assign table to default data grid view
            dataGridView1.DataSource = mainDt;

            xlWorkBook.Close(true, missing, missing);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

[no name]

В чем вопрос?

Vineet_2109

Ячейка листа Excel имеет дату как "11-30-11", но когда я импортирую ее, она преобразуется в "78608". Поэтому я хочу импортировать эти данные с датой "11-30-11".

Vineet_2109

Ячейка листа Excel имеет дату как "11-30-11", но когда я импортирую ее, она преобразуется в "78608". Поэтому я хочу импортировать эти данные с датой "11-30-11".

3 Ответов

Рейтинг:
23

Kenneth Haugland

В автоматизированном excel вам нужно импортировать DateTime следующим образом:

double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);


Рейтинг:
2

Member 14625927

for (int a = 2; a <= vertical; a++)
{
Если (а.Дата.Свойство hasvalue)
рабочий лист.Ячейки[recordIndex, 15].Value = item.Date.Ценность.ToShortDateString();
}


это будет прекрасно работать.


Рейтинг:
1

Vineet_2109

Этот код преобразует строку в формат MM-dd-yy

IFormatProvider yyyymmddFormat = new System.Globalization.CultureInfo("en-GB",false);
string x = myValues.GetValue(a, 2).ToString();
double d = double.Parse(x);
DateTime conv = DateTime.FromOADate(d);
string dtY = conv.ToString("MM-dd-yy",yyyymmddFormat);