Excel数字格式

时间:2016-03-10 09:04:18

标签: c# wpf excel formatting

我正在尝试使用wpf从datagrid创建一个excel,但是当我将一个列格式化为文本时,它仍会将某些列转换为我认为是日期转换的列。

Excel.Range rg1 = (Excel.Range)xlWorkSheet.Cells[1, 3];
rg1.EntireColumn.NumberFormat = "text"; 

这是设置列的转换的方式,但这会导致Excel仍然将某些字段格式化为日期值...如果您查看列foutcode,您将看到我的意思。

enter image description here

结果:

enter image description here

我认为会发生的事情是它会自动识别该值并查看它是否符合日期格式,而我告诉它只需要处理常规文本!那么有谁知道如何摆脱它?因为这个小错误导致数据无法使用。也许使用比文本更具体的格式?但我似乎无法弄清楚如何。

同样将很多行转换为excel需要花费相当多的时间(1000行为4-5秒)。有没有办法让它变得更快?非常感谢所有帮助。

public void ExportToExcel(List<Fouten> data)
        {
            try
            {
                if (data.Count > 0)
                {
                    // Displays a SaveFileDialog so the user can save the Image
                    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
                    saveFileDialog1.Filter = "Excel File|*.xls";
                    saveFileDialog1.Title = "Save an Excel File";
                    saveFileDialog1.FileName = "Data rapport";

                    // If the User Clicks the Save Button then the Module gets executed otherwise it skips the scope
                    if ((bool)saveFileDialog1.ShowDialog())
                    {

                        Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                        if (xlApp != null)
                        {
                            Excel.Workbook xlWorkBook;
                            Excel.Worksheet xlWorkSheet;
                            object misValue = System.Reflection.Missing.Value;

                            xlWorkBook = xlApp.Workbooks.Add(misValue);
                            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);




                            int rowCount = 1;

                            xlWorkSheet.Cells[rowCount, 1] = "Datum";
                            xlWorkSheet.Cells[rowCount, 2] = "Tijd";
                            xlWorkSheet.Cells[rowCount, 3] = "Foutcode";
                            xlWorkSheet.Cells[rowCount, 4] = "Omschrijving";
                            xlWorkSheet.Cells[rowCount, 5] = "Module";
                            xlWorkSheet.Cells[rowCount, 6] = "TreinId";

                            rowCount++;


                            Excel.Range rg = (Excel.Range)xlWorkSheet.Cells[1, 2];
                            rg.EntireColumn.NumberFormat = "hh:mm:ss.000";

                        Excel.Range rg1 = (Excel.Range)xlWorkSheet.Cells[1, 3];
                        rg1.EntireColumn.NumberFormat = "text";

                        foreach (Fouten item in data)
                        {
                            string[] moduleNaam = item.Module.Split('_');
                            xlWorkSheet.Cells[rowCount, 1] = item.Datum;
                            xlWorkSheet.Cells[rowCount, 2] = item.Time.ToString();
                            xlWorkSheet.Cells[rowCount, 3] = item.FoutCode;
                            xlWorkSheet.Cells[rowCount, 4] = item.Omschrijving;
                            xlWorkSheet.Cells[rowCount, 5] = moduleNaam[0].ToUpper();
                            xlWorkSheet.Cells[rowCount, 6] = item.TreinId;

                            rowCount++;
                        }



                        xlWorkSheet.Columns.AutoFit();

                        // If the file name is not an empty string open it for saving.
                        if (!String.IsNullOrEmpty(saveFileDialog1.FileName.ToString()) && !string.IsNullOrWhiteSpace(saveFileDialog1.FileName.ToString()))
                        {
                            xlWorkBook.SaveAs(saveFileDialog1.FileName, Excel.XlFileFormat.xlWorkbookNormal);
                            xlWorkBook.Close(true);
                            xlApp.Quit();

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

                            MessageBox.Show("Excel File Exported Successfully", "Export Engine");
                        }

                    }

                }
            }
            else
            {
                MessageBox.Show("Nothing to Export", "Export Engine");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

1 个答案:

答案 0 :(得分:0)

Text Range.NumberFormat property是一个&#39; at&#39; 符号(例如大写2或 @ ),而不是文字。< / p>

rg1.EntireColumn.NumberFormat = "@";

更多Number Format Code s。