Экспорт таблицы SQL в Excel в C # - это случайный выбор форматов ячеек для дат - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь экспортировать набор данных SQL в документ Excel.

В определенные моменты при выводе полей даты ячейки Excel форматируются в определенные моменты как ячейки даты, а некоторые - как общие.Это приводит к тому, что даты иногда отображаются в нужном мне формате: день / месяц / год в британском стиле, месяц / день / год в американском стиле.

Если бы это был только один из способов, это было бы хорошо, потому чтоотчет будет по крайней мере последовательным.Однако тот факт, что код будет иногда выводить правильный формат, а иногда нет, очень раздражает

Мой код до сих пор:

private void doReport(DataSet myDS)
    {
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        int i;

        object misValue = System.Reflection.Missing.Value;
        xlWorkBook = xlApp.Workbooks.Add(misValue);

        xlWorkSheet = xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        xlWorkSheet.Cells[1, 1] = "Report produced on the " + System.DateTime.Now.ToString("dd/MM/yyyy");

        xlWorkSheet.Cells[3, 1] = "Project Type";
        xlWorkSheet.Cells[3, 2] = "Client";
        xlWorkSheet.Cells[3, 3] = "Date Started";
        xlWorkSheet.Cells[3, 4] = "Target Date";
        xlWorkSheet.Cells[3, 5] = "Date Completed";
        xlWorkSheet.Cells[3, 6] = "Stage Target";
        xlWorkSheet.Cells[3, 7] = "Stage";
        xlWorkSheet.Cells[3, 8] = "Assigned To";
        xlWorkSheet.Cells[3, 9] = "Notes";

        i = 4;

        foreach (DataRow row in myDS.Tables[0].Rows)
        {
            xlWorkSheet.Cells[i, 1] = row["strProjectDescription"];
            xlWorkSheet.Cells[i, 2] = row["strClient"];
            DateTime dteProjStart = (DateTime)row["dteProjectStart"];
            xlWorkSheet.Cells[i, 3] = dteProjStart.ToString("dd/MM/yyyy");
            DateTime dteProjTarget = (DateTime)row["dteProjectTarget"];
            xlWorkSheet.Cells[i, 4] = dteProjTarget.ToString("dd/MM/yyyy");
            if (rbViewProjectsCompletedVal.Checked)
            { 
                DateTime dteProjFin = (DateTime)row["dteProjectFinished"];
                xlWorkSheet.Cells[i, 5] = dteProjFin.ToString("dd/MM/yyyy");
            }
            if (row.IsNull("dteProjectStageTarget") == false)
            {
                DateTime dteProjStageTar = (DateTime)row["dteProjectStageTarget"];
                xlWorkSheet.Cells[i, 6] = dteProjStageTar.ToString("dd/MM/yyyy");
            }
            xlWorkSheet.Cells[i, 7] = row["strProjectStageDescription"];
            xlWorkSheet.Cells[i, 8] = row["initials"];
            xlWorkSheet.Cells[i, 9] = csSQL.runSQL("select strProjectNotes from tbl_AdminSupport_Projects where intASProjectID = " + row["intASProjectID"], "Management").Tables[0].Rows[0]["strProjectNotes"];

            i++;
        }


        xlWorkSheet.Columns.AutoFit();
        xlWorkSheet.Rows.AutoFit();
        xlApp.Visible = true;

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

Структура набора данных:

Любойэлемент с префиксом str является nvarchar (max), dte является датой

...