Измените формат столбца Excel программным способом и предотвратите научную запись c, например, показатель степени (E) в полях nubmber. - PullRequest
0 голосов
/ 17 января 2020

Я генерирую Excel из DataSet, используя следующий код

int ColumnsCount;

        if (DataTable == null || (ColumnsCount = DataTable.Columns.Count) == 0)
            throw new Exception("ExportToExcel: Null or empty input table!\n");

        // load excel, and create a new workbook
        Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();
        Excel.Workbooks.Add();

        // single worksheet
        Microsoft.Office.Interop.Excel._Worksheet Worksheet = Excel.ActiveSheet;

        object[] Header = new object[ColumnsCount];

        // column headings               
        for (int i = 0; i < ColumnsCount; i++)
            Header[i] = DataTable.Columns[i].ColumnName;


        Microsoft.Office.Interop.Excel.Range HeaderRange = Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, ColumnsCount]));
        HeaderRange.Value = Header;
        HeaderRange.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.BlanchedAlmond); //ConsoleColor.Yellow;//


         HeaderRange.Font.Bold = true;

        // DataCells
        int RowsCount = DataTable.Rows.Count;
        object[,] Cells = new object[RowsCount, ColumnsCount];

        for (int j = 0; j < RowsCount; j++)
            for (int i = 0; i < ColumnsCount; i++)
                Cells[j, i] = (DataTable.Rows[j][i]);

        Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[2, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[RowsCount + 1, ColumnsCount])).Value = Cells;
        Worksheet.Columns.AutoFit();





                Worksheet.SaveAs(ExcelFilePath);
                Excel.Quit();
                Console.Write("Excel file saved!");

Однако один из моих столбцов отображается как 1.004E+12 вместо 1004000003451, хотя это строковый столбец, возвращаемый из sql сервер как varchar. Как я могу предотвратить это? Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 17 января 2020

В конце концов это был простой, просто используемый метод .columns

Worksheet.Columns("A").NumberFormat ="@";
...