小弟在网上搜索了一大把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;
}
急用,解决马上给分
的数字类型太长,比如身份证号,在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;
}
急用,解决马上给分
解决方案 »
- winForm 实现歌曲置顶功能 第一次能成功 第二次就乱了 请大家看看
- 怎样用bat压缩批量图片
- NHibernate总是出错,帮帮我吧!
- 很简单的一个问题
- BandObject.dll 这个东西怎么才能装到系统中,头大死了
- 谁能给我讲讲在SQL2000中导入DBF(以前用FOXBASE+建的)的具体步骤?谢了!
- 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭。
- 请问如何使用RegularExpression来判别一个路径字符串 , 如 “C:\123”、”d:\123\12”..等等
- 求一个能自动填写表单的程序思路
- listview控件提示InvalidArgument=“1”的值对于“index”无效。
- 如何给自定义控件添加DataSource等属性
- c# 已关闭 Safe Handle 怎么解决啊
而是把你要导出到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);
}