导出到Excel中后
文本字段都还好,唯独时间那个字段显示#######,只能在Excel中拉宽那一列才能显示正常。
大家帮忙想想有没有好的解决办法?这样拿给客户有点不好意思啊。
我的写法如下:

解决方案 »

  1.   


    public static void DataGridViewToExcel(DataGridView dgv)
            {
                //申明保存对话框    
                SaveFileDialog dlg = new SaveFileDialog();
                //默然文件后缀    
                dlg.DefaultExt = "xlsx ";//可替换成xls
                //文件后缀列表    
                dlg.Filter = "EXCEL文件(*.XLSX)|*.xlsx ";//可替换成xls
                //默然路径是系统当前路径    
                dlg.InitialDirectory = Directory.GetCurrentDirectory();
                //打开保存对话框    
                if (dlg.ShowDialog() == DialogResult.Cancel) return;
                //返回文件路径    
                string fileNameString = dlg.FileName;
                //验证strFileName是否为空或值无效    
                if (fileNameString.Trim() == " ")
                { return; }
                //定义表格内数据的行数和列数    
                int rowscount = dgv.Rows.Count;
                int colscount = dgv.Columns.Count;            //验证以fileNameString命名的文件是否存在,如果存在删除它    
                FileInfo file = new FileInfo(fileNameString);
                if (file.Exists)
                {
                    try
                    {
                        file.Delete();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }            Microsoft.Office.Interop.Excel.Application objExcel = null;
                Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
                Microsoft.Office.Interop.Excel.Worksheet objsheet = null;                //申明对象    
                    objExcel = new Microsoft.Office.Interop.Excel.Application();
                    objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                    objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;                //向Excel中写入表格的表头    
                    int displayColumnsCount = 1;
                    for (int i = 0; i <= dgv.ColumnCount - 1; i++)
                    {
                        if (dgv.Columns[i].Visible == true)
                        {
                            objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                            displayColumnsCount++;
                        }
                    }
        
                    //向Excel中逐行逐列写入表格中的数据    
                    for (int row = 0; row <= dgv.RowCount - 1; row++)
                    {
                        //tempProgressBar.PerformStep();                        displayColumnsCount = 1;
                        for (int col = 0; col < colscount; col++)
                        {
                            if (dgv.Columns[col].Visible == true)
                            {
                                try
                                {
                                    objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                    displayColumnsCount++;
                                }
                                catch (Exception)
                                {                            }                        }
                        }
                    //保存文件    
                    objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                            Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                            Missing.Value, Missing.Value);
                }
            }
      

  2.   

    加个AutoFill() 自动调整列宽
      

  3.   

    错了 - - 时AutoFit() .... 
      

  4.   

    objsheet.Columns.AutoFit()木环境 见谅..... 
      

  5.   

    拉宽就好,没得办法,相同的情况还有金钱、货款超长四舍五入。这个是EXCEL处理的没得改,不然就设置单元格自动匹配(还是自动调整)。具体属性不记得了,录个宏就有。
      

  6.   

    设置单元格格式
    mySheet.Cells(1,9).NumberFormatLocal = "@" 
    Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[1,3]); 
    r.NumberFormat = "@"; 
    r.NumberForma = "0.00_ " 
    r.NumberForma = "¥#,##0.00;¥-#,##0.00" 
    r.NumberForma = _"_ ¥* #,##0.00_ ;_ ¥* -#,##0.00_ ;_ ¥* ""-""??_ ;_ @_ " 
    r.NumberForma = "yyyy-m-d" 
    r.NumberForma = "[$-F400]h:mm:ss AM/PM" 
    r.NumberForma = "000000" 
    myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Bold = true; 
    myExcel.get_Range(myExcel.Cells[1,1],myExcel.Cells[1,1]).Font.Size = 16;