Microsoft.Office.Interop.Excel 使用方法求解。 //添加引用using Microsoft.Office.Interop.Excel; ApplicationClass ExcelApp = new ApplicationClass(); Microsoft.Office.Interop.Excel.Workbook book = ExcelApp.Workbooks.Add();//下一步是建一个sheet 请问该如何操作或者说这上面有错误 可以提出来。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考这个:http://msdn.microsoft.com/zh-cn/library/ms173186(VS.80).aspx 导出excel 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); //关闭excel进程 if (xlapp != null) { xlapp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp); foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL")) { //先关闭图形窗口。如果关闭失败...有的时候在状态里看不到图形窗口的excel了, //但是在进程里仍然有EXCEL.EXE的进程存在,那么就需要杀掉它:p if (theProc.CloseMainWindow() == false) { theProc.Kill(); } } xlapp = null; } } } 这些,在MSDN上都有例子,为什么自己不查查呢? protected void AddExcel(DataSet ds, ref bool s) { try { System.Data.DataTable dt = ds.Tables[0]; SaveFileDialog sf = new SaveFileDialog(); sf.InitialDirectory = "C:\\"; sf.Filter = "excel文件(*.xls)|*.xls"; if (sf.ShowDialog()==DialogResult.OK) { string fileName = sf.FileName; Excel.Application excel = new Excel.ApplicationClass(); int rowIndex = 1; int colIndex = 0; excel.Application.Workbooks.Add(true); foreach (DataColumn col in dt.Columns) { colIndex++; excel.Cells[1, colIndex] = col.ColumnName; } foreach (DataRow row in dt.Rows) { rowIndex++; colIndex = 0; for (colIndex = 0; colIndex < dt.Columns.Count; colIndex++) { excel.Cells[rowIndex, colIndex + 1] = row[colIndex].ToString(); } } excel.Visible = false; excel.ActiveWorkbook.SaveAs(fileName, Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null); excel.Quit(); excel = null; GC.Collect();//垃圾回收 } } catch { s = false; } }啊哈哈 这个取决于 Excel 的版本.2003 和 2007是不同的.具体例子网上很多 谢谢各位。dgtg77 您好 剩余可用分:11分又要用了。。先结贴拿分了。。 高并发的时候,如何在c#中获取当前插入的自增ID号? winform 正则表达式问题,懂的人帮忙看下 经验帝入。外键该用"用户ID"还是"用户名"? 串口接收问题???请教高手! 水晶报表如何绑定类似于DataSet的数据集 如何分割一个Image? axWindowsMediaPlayer1怎样在播放完毕后停在最后一帧? win7的启动项在进入桌面后5秒才启动,怎样使其在进入桌面同时启动 OleDb 如何将DateTime类型的参数传入到存储过程? 如何让TreeView的"小加号"失效 C# ACCESS数据库
{
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);
//关闭excel进程
if (xlapp != null)
{
xlapp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp);
foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
//先关闭图形窗口。如果关闭失败...有的时候在状态里看不到图形窗口的excel了,
//但是在进程里仍然有EXCEL.EXE的进程存在,那么就需要杀掉它:p
if (theProc.CloseMainWindow() == false)
{
theProc.Kill();
}
}
xlapp = null;
}
}
}
protected void AddExcel(DataSet ds, ref bool s)
{
try
{
System.Data.DataTable dt = ds.Tables[0]; SaveFileDialog sf = new SaveFileDialog();
sf.InitialDirectory = "C:\\";
sf.Filter = "excel文件(*.xls)|*.xls";
if (sf.ShowDialog()==DialogResult.OK)
{
string fileName = sf.FileName;
Excel.Application excel = new Excel.ApplicationClass(); int rowIndex = 1;
int colIndex = 0; excel.Application.Workbooks.Add(true); foreach (DataColumn col in dt.Columns)
{
colIndex++;
excel.Cells[1, colIndex] = col.ColumnName;
} foreach (DataRow row in dt.Rows)
{
rowIndex++;
colIndex = 0;
for (colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
{
excel.Cells[rowIndex, colIndex + 1] = row[colIndex].ToString();
}
} excel.Visible = false;
excel.ActiveWorkbook.SaveAs(fileName, Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
excel.Quit();
excel = null; GC.Collect();//垃圾回收
}
}
catch
{
s = false;
}
}啊哈哈
剩余可用分:11分又要用了。。先结贴拿分了。。