首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

winform DataTable数据导入excel,该如何解决

2013-08-11 
winform DataTable数据导入excel小弟在网上搜索了一大把DataTable数据导入excel例子,也实现了该功能,但是

winform DataTable数据导入excel
   小弟在网上搜索了一大把DataTable数据导入excel例子,也实现了该功能,但是有个问题小问题始终未能解决,就是某列
的数字类型太长,比如身份证号,在excel里显示就是指数类型,请问这个如何修改
   代码如下:
  


 private static bool ExportExcel()
        {
            if (saveFileName.IndexOf(":") < 0) return false; //被点了取消

            Excel.Application xlApp = new Excel.Application();
            object missing = System.Reflection.Missing.Value;

            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                return false;
            }
            Excel.Workbooks workbooks = xlApp.Workbooks;
            Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];    //取得sheet1
            Excel.Range range;

            string strCaption = saveFileName.Remove(0, saveFileName.LastIndexOf('\\') + 1);
            strCaption = strCaption.Remove(strCaption.Length - 4, 4);

            long totalCount = dtDataSource.Rows.Count;
            long rowRead = 0;
            float percent = 0;


            range = (Excel.Range)worksheet.get_Range(worksheet.Cells[1, 1],
                worksheet.Cells[2, dtDataSource.Columns.Count]);                    //标题占用前两行


            range.Merge(missing);                                                   //合并
            range.Font.Bold = true;                                                 //粗体设置
            range.Font.Size = 16;                                                   //字体大小设置 
            range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;              //水平对齐设置 
            range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;                //垂直对齐设置
            //range.FormulaR1C1 = 公式;             //公式设置
            //range.ColumnWidth = 宽度;             //列宽设置
            //range.RowHeight = 行高;               //行高  
            worksheet.Cells[1, 1] = strCaption;

            //写入字段
            for (int i = 0; i < dtDataSource.Columns.Count; i++)
            {
                worksheet.Cells[4, i + 1] = dtDataSource.Columns[i].ColumnName;
                range = (Excel.Range)worksheet.Cells[4, i + 1];


                range.Interior.ColorIndex = 15;
                range.Font.Bold = true;
            }

            //写入数值
            for (int r = 0; r < dtDataSource.Rows.Count; r++)
            {
                for (int i = 0; i < dtDataSource.Columns.Count; i++)
                {
                    worksheet.Cells[r + 5, i + 1] = dtDataSource.Rows[r][i];
                }
                rowRead++;
                percent = ((float)(100 * rowRead)) / totalCount;
                Application.DoEvents();
            }
            worksheet.SaveAs(saveFileName, missing, missing, missing, missing, missing, missing, missing, missing, missing);

            range = worksheet.get_Range(worksheet.Cells[4, 1],
                worksheet.Cells[dtDataSource.Rows.Count + 4, dtDataSource.Columns.Count]);
            range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
            range.NumberFormat = "@"; //这句话是我在上面搜索到的,可惜不起作用
            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;


            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;

            if (dtDataSource.Columns.Count > 1)
            {
                range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
            }
            workbook.Close(missing, missing, missing);
            xlApp.Quit();

            return true;
        }
  



急用,解决马上给分
[解决办法]
一个简单办法:在execel输入数据之前,把身份证那列的单元格属性设为:“文本”,数据将以字符串方式出现,你看到和获取都将是完整的身份证的字符串!
[解决办法]
不是把你的DataTable 身份证 换成字符串


而是把你要导出到EXCEL 的range 的身份证那一列 换成 字符串 
[解决办法]

wSheet.get_Range(excel.Cells[1, 1], excel.Cells[dtDataSource.Rows.Count + 1, dtDataSource.Columns.Count - 1]).NumberFormatLocal = "@"; //设置为文本


写在 worksheet.SaveAs(saveFileName, missing, missing, missing, missing, missing, missing, missing, miss……………………之后。
[解决办法]

//将datagridview导出到excel ,和LZ的意思是一个意思 将datagridview转换成datatable就OK了
        public void Exportdatagridviewtoexcel(DataGridView mydgv)
        {
            if (mydgv.Rows.Count == 0)
            {


                MessageBox.Show(" 没有数据可供导出!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                SaveFileDialog savedialog = new SaveFileDialog();
                savedialog.DefaultExt = "xlsx";
                savedialog.Filter = "microsoft office execl files (*.xlsx)
[解决办法]
*.xlsx";
                savedialog.FilterIndex = 0;
                savedialog.RestoreDirectory = true;
                savedialog.Title = "导出数据到excel表格";
                savedialog.ShowDialog();
                if (savedialog.FileName.IndexOf(":") < 0) return; //被点了取消  
                //Microsoft.office.interop.excel.application xlapp = new microsoft.office.interop.excel.application();
                Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();
                if (xlapp == null)
                {
                    MessageBox.Show("可能您的机子未安装excel,无法创建excel对象!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }



                Microsoft.Office.Interop.Excel.Workbooks workbooks = xlapp.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1  
                //定义表格内数据的行数和列数   
                int rowscount = mydgv.Rows.Count;
                int colscount = mydgv.Columns.Count;
                //行数不可以大于65536   
                if (rowscount > 65536)
                {
                    MessageBox.Show("数据行记录超过65536行,不能保存!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //列数不可以大于255   
                if (colscount > 256)
                {
                    MessageBox.Show("数据列记录超过256列,不能保存!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //写入标题
                for (int i = 0; i < mydgv.ColumnCount; i++)


                {
                    worksheet.Cells[1, i + 1] = mydgv.Columns[i].HeaderText;
                }
                //写入数值
                for (int r = 0; r < mydgv.Rows.Count; r++)
                {
                    for (int i = 0; i < mydgv.ColumnCount; i++)
                    {
                        if (mydgv[i, r].ValueType == typeof(string))
                        {
                            worksheet.Cells[r + 2, i + 1] = "" + mydgv.Rows[r].Cells[i].Value;//将长数值转换成文本
                        }
                        else
                        {
                            worksheet.Cells[r + 2, i + 1] = mydgv.Rows[r].Cells[i].Value;
                        }
                    }
                    System.Windows.Forms.Application.DoEvents();
                }


                worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
                if (savedialog.FileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(savedialog.FileName);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("导出文件时出错,文件可能正被打开!..." + ex.Message, "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                //GC.Collect();//强行销毁  
                MessageBox.Show("数据导出成功! ", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

热点排行