读书人

winform DataTable数据导入excel,该怎

发布时间: 2012-03-16 16:34:56 作者: rapoo

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

C# code
 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 的身份证那一列 换成 字符串
[解决办法]

C# code
wSheet.get_Range(excel.Cells[1, 1], excel.Cells[dtDataSource.Rows.Count + 1, dtDataSource.Columns.Count - 1]).NumberFormatLocal = "@"; //设置为文本
[解决办法]
C# code
//将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);        } 

读书人网 >C#

热点推荐