求救c#中导出Excel的问题~~! 现要将Access中的数据查询出来然后通过c#语言以Excel表形式导出,请问该怎么做啊,有没有源码例子让小弟看下... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <summary> /// 将ListView的内容写入Excel表中 /// </summary> /// <param name="LView">ListView控件</param> /// <param name="strTitle">内容的标题</param> public void UWriteListViewToExcel(ListView LView, string strTitle) { try { Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); object m_objOpt = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Workbooks ExcelBooks = (Microsoft.Office.Interop.Excel.Workbooks)ExcelApp.Workbooks; Microsoft.Office.Interop.Excel._Workbook ExcelBook = (Microsoft.Office.Interop.Excel._Workbook)(ExcelBooks.Add(m_objOpt)); Microsoft.Office.Interop.Excel._Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel._Worksheet)ExcelBook.ActiveSheet; //设置标题 ExcelApp.Caption = strTitle; ExcelSheet.Cells[1, 1] = strTitle; //写入列名 for (int i = 1; i <= LView.Columns.Count; i++) { ExcelSheet.Cells[2, i] = LView.Columns[i - 1].Text; } ExcelSheet.Columns.ColumnWidth = 16; //((Excel.Range)ExcelSheet.Columns["C", Type.Missing]).ColumnWidth = 4; // 将第三列列宽设置成4 //写入内容 progressBar1.Maximum = LView.Items.Count; for (int i = 3; i < LView.Items.Count + 3; i++) { ExcelSheet.Cells[i, 1] = LView.Items[i - 3].Text; for (int j = 2; j <= LView.Columns.Count; j++) { ExcelSheet.Cells[i, j] = LView.Items[i - 3].SubItems[j - 1].Text; } progressBar1.Value = i-2; } progressBar1.Visible = false; //显示Excel ExcelApp.Visible = true; } catch (SystemException e) { MessageBox.Show(e.ToString()); } }这个是将listview内容导出到EXCEL,楼主可以先将查询到的数据导入到listview里面,然后调用这个函数来写EXCEL文件,我所有程序中用到导出EXCEL功能地方我都是调用这个函数来写的,放心,我已经测试过了。 private void button1_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; //提示是否创建(*****).xls文件 saveFileDialog.Title = "导出Excel文件到"; // saveFileDialog.ShowDialog(); if (saveFileDialog.ShowDialog() == DialogResult.OK) { Stream myStream; myStream = saveFileDialog.OpenFile(); StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312")); string str = ""; try { //写标题 for (int i = 0; i < dataGridView1.ColumnCount; i++) { if (i > 0) { str += "\t"; } str += dataGridView1.Columns[i].HeaderText; } sw.WriteLine(str); //写内容 for (int j = 0; j < dataGridView1.Rows.Count - 1; j++) { string tempStr = ""; for (int k = 0; k < dataGridView1.Columns.Count; k++) { if (k > 0) { tempStr += "\t"; } tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString(); } sw.WriteLine(tempStr); } MessageBox.Show("导出数据成功"); sw.Close(); myStream.Close(); } catch (Exception ee) { MessageBox.Show(ee.Message); return; } finally { sw.Close(); myStream.Close(); } } } 我就是用的这个,只需要: using System.IO; 放一个SaveFileDialog控件 OK 不需要添加任何引用 想请教2楼那个dataGridView1是什么? DataGridView 是显示数据的控件啊 VS2005 Winform开发才有这个控件 VS2003是DataGrid 2楼的答案,对我没有导过listview,借鉴一下 Winform 开发首先 把从数据库查询出来的数据绑定给 DataGridView控件 然后在用上面的方法ASP.NET 开发的话 也差不多 只是绑定数据的控件名字不一样 不要SaveFileDialog控件 因为工具箱中 HTML控件组中有 Input(file) 控件 点击右键 作为服务器控件运行 就OK 再用上面的方法 先把数据填充到dataset里,然后倒入到excel里就可以了 可以使用ComponentOne组件,也可以使用如下方法,没有版本限制:using System;using System.Collections.Generic;using System.Text;using System.Reflection;namespace ExcelOpt{ /// <summary> /// Excel后期绑定的操作类 /// </summary> public class Application { object m_ExcelApp; public Application() { Type objExcelType = Type.GetTypeFromProgID("Excel.Application"); if (objExcelType == null) { throw new Exception("未发现Excel程序"); } m_ExcelApp = Activator.CreateInstance(objExcelType); if (m_ExcelApp == null) { throw new Exception("启用Excel程序失败!"); } } public bool Visible { get { object objVisible = m_ExcelApp.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, m_ExcelApp, null); if (objVisible is Boolean) return (bool)objVisible; else throw new Exception("调用方法失败!"); } set { object[] Parameters = new object[1] { value }; m_ExcelApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, m_ExcelApp, Parameters); } } public Workbooks Workbooks { get { object workbooks = m_ExcelApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, m_ExcelApp, null); if (workbooks == null) throw new Exception("查询工作簿时失败!"); else return new Workbooks(workbooks); } } } public class Workbooks { private object m_Workbooks; private string m_ExcelFileName; public Workbooks(object workbooks) { m_Workbooks = workbooks; } public void Open(string ExcelFileName) { try { m_ExcelFileName = ExcelFileName; object[] Parameters = new object[1] { ExcelFileName }; m_Workbooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, m_Workbooks, Parameters); } catch (Exception err) { throw err; } } public Workbook this[int index] { get { object[] Parameters = new object[1]{index }; object workbook = m_Workbooks.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, m_Workbooks, Parameters); if (workbook == null) throw new Exception("获取工作薄时出现错误!"); else return new Workbook(workbook); } } } public class Workbook { private object m_Workbook; public Workbook(object workbook) { m_Workbook = workbook; } public Worksheets Worksheets { get { object worksheets = m_Workbook.GetType().InvokeMember("Worksheets", System.Reflection.BindingFlags.GetProperty, null, m_Workbook, null); if (worksheets == null) throw new Exception("获取工作表集合时失败!"); else return new Worksheets(worksheets); } } public void SaveAs(string FileName) { object[] Parameters = new object[1] { FileName }; m_Workbook.GetType().InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, m_Workbook, Parameters); } } public class Worksheets { private object m_Worksheets; public Worksheets ( object worksheets ) { m_Worksheets = worksheets; } public Worksheet this[int index] { get { object[] Parameters = new object[1] { index }; object worksheet = m_Worksheets.GetType().InvokeMember("Item", System.Reflection.BindingFlags.GetProperty, null, m_Worksheets, Parameters); if (worksheet == null) throw new Exception("获取工作表时出现错误!"); else return new Worksheet(worksheet); } } } public class Worksheet { private object m_Worksheet; public Worksheet ( object worksheet ) { m_Worksheet = worksheet ; } public Range this[ int row , int col ] { get { object[] Parameters = new Object[2] { row , col }; object cells = m_Worksheet.GetType().InvokeMember("Cells", System.Reflection.BindingFlags.GetProperty, null, m_Worksheet, Parameters); if (cells == null) throw new Exception("获取单元格失败!"); else return new Range(cells); } } public Range this[ int row , string col ] { get { object[] Parameters = new Object[2] { row, col }; object cells = m_Worksheet.GetType().InvokeMember("Cells", System.Reflection.BindingFlags.GetProperty, null, m_Worksheet, Parameters); if (cells == null) throw new Exception("获取单元格失败!"); else return new Range(cells); } } } public class Range { private object m_Range; public Range(object Range) { m_Range = Range; } public object Value { get { object result = m_Range.GetType().InvokeMember("Value", System.Reflection.BindingFlags.GetProperty, null, m_Range, null); return result; } set { object[] Parameters = new Object[1] { value }; m_Range.GetType().InvokeMember("Value", System.Reflection.BindingFlags.SetProperty, null, m_Range, Parameters); } } }} http://blog.csdn.net/lanwilliam/archive/2008/06/16/2552457.aspx试试这个类 这段时间在做一个项目时,遇到了操作EXCEL表的问题,查了不少资料,总结如下: 以下是一些对excel的一些基本操作 1:工程对excel类库的导入,如:c:\program files\Microsoft office\offiece11\excel.exe 2:命名控件的引入: using Microsoft.office.Interop.Excel; 3:如果是对一个已经存在的excel文件进行操作则: Application app=new Application(); Workbook wbook=app.Workbooks.Open("c:\\temp.xls",Type.Missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing); Worksheet worksheet=(Worksheet)wbook.Worksheets[1]; 4:如果是新建一个excel文件: Application app=new Application(); Workbook wbook=app.Workbook.Add(Type.missing); Worksheet worksheet=(Worksheet)wbook.Worksheets[1]; 5:设置某个单元格里的内容: worksheet.Cells[1,2]="列内容" 6读取某个单元格里的内容 string temp=((Range)worksheet.Cells[1,2]).Text; 7设置某个单元格里的格式 Excel.Range rtemp=worksheet.get_Range("A1","A1"); rtemp.Font.Name="宋体"; rtemp.Font.FontStyle="加粗"; rtemp.Font.Size=5; 8 保存新建的内容: worksheet.SaveAs("c:\\temp.xls",Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing); ------ 另要注意用.net时,打开dataView时是默认新增了一条记录,这样的话,必须要在行号减去一条,这样才不会出现那烦人的“未设置对象实例”的错误。 通过ActiveX控件可以实现FileStream上传本地文件到服务器吗? 关于app.config文件的使用 怎么得到被隐藏的网页源码? 求助,控件改名的bug。。。 介绍个程序员常用站点大全 请问:在.cs中如何通过快捷键的方式来完成注释代码的编写 谢谢 小弟请问一个nhibernate的问题 怎么做标签树视图? 请问这个布局怎么弄?关于Winform的Dock? 求免费下载win7可以运行学习c#的软件连接和步骤 求tcp接受数据,快速匹配数据包头部的方法 趁论坛升级之前问个着急的问题---怎样让滚动条滚动?
/// 将ListView的内容写入Excel表中
/// </summary>
/// <param name="LView">ListView控件</param>
/// <param name="strTitle">内容的标题</param>
public void UWriteListViewToExcel(ListView LView, string strTitle)
{
try
{
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
object m_objOpt = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Workbooks ExcelBooks = (Microsoft.Office.Interop.Excel.Workbooks)ExcelApp.Workbooks;
Microsoft.Office.Interop.Excel._Workbook ExcelBook = (Microsoft.Office.Interop.Excel._Workbook)(ExcelBooks.Add(m_objOpt));
Microsoft.Office.Interop.Excel._Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel._Worksheet)ExcelBook.ActiveSheet; //设置标题
ExcelApp.Caption = strTitle;
ExcelSheet.Cells[1, 1] = strTitle;
//写入列名
for (int i = 1; i <= LView.Columns.Count; i++)
{
ExcelSheet.Cells[2, i] = LView.Columns[i - 1].Text;
} ExcelSheet.Columns.ColumnWidth = 16;
//((Excel.Range)ExcelSheet.Columns["C", Type.Missing]).ColumnWidth = 4; // 将第三列列宽设置成4
//写入内容
progressBar1.Maximum = LView.Items.Count;
for (int i = 3; i < LView.Items.Count + 3; i++)
{
ExcelSheet.Cells[i, 1] = LView.Items[i - 3].Text;
for (int j = 2; j <= LView.Columns.Count; j++)
{
ExcelSheet.Cells[i, j] = LView.Items[i - 3].SubItems[j - 1].Text;
}
progressBar1.Value = i-2;
}
progressBar1.Visible = false;
//显示Excel
ExcelApp.Visible = true;
}
catch (SystemException e)
{
MessageBox.Show(e.ToString());
}
}这个是将listview内容导出到EXCEL,楼主可以先将查询到的数据导入到listview里面,然后调用这个函数来写EXCEL文件,我所有程序中用到导出EXCEL功能地方我都是调用这个函数来写的,放心,我已经测试过了。
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true; //提示是否创建(*****).xls文件
saveFileDialog.Title = "导出Excel文件到"; // saveFileDialog.ShowDialog();
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312")); string str = "";
try
{
//写标题
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
if (i > 0)
{
str += "\t";
}
str += dataGridView1.Columns[i].HeaderText;
} sw.WriteLine(str);
//写内容
for (int j = 0; j < dataGridView1.Rows.Count - 1; j++)
{
string tempStr = "";
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString();
}
sw.WriteLine(tempStr);
} MessageBox.Show("导出数据成功");
sw.Close();
myStream.Close(); }
catch (Exception ee)
{
MessageBox.Show(ee.Message);
return;
}
finally
{
sw.Close();
myStream.Close();
}
}
} 我就是用的这个,只需要: using System.IO; 放一个SaveFileDialog控件 OK 不需要添加任何引用
我没有导过listview,借鉴一下
首先 把从数据库查询出来的数据绑定给 DataGridView控件 然后在用上面的方法ASP.NET 开发的话 也差不多 只是绑定数据的控件名字不一样
不要SaveFileDialog控件 因为工具箱中 HTML控件组中有 Input(file) 控件 点击右键 作为服务器控件运行 就OK 再用上面的方法
using System.Collections.Generic;
using System.Text;
using System.Reflection;namespace ExcelOpt
{
/// <summary>
/// Excel后期绑定的操作类
/// </summary>
public class Application
{
object m_ExcelApp;
public Application()
{
Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
if (objExcelType == null)
{
throw new Exception("未发现Excel程序");
}
m_ExcelApp = Activator.CreateInstance(objExcelType);
if (m_ExcelApp == null)
{
throw new Exception("启用Excel程序失败!");
}
}
public bool Visible
{
get
{
object objVisible =
m_ExcelApp.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, m_ExcelApp, null);
if (objVisible is Boolean)
return (bool)objVisible;
else
throw new Exception("调用方法失败!");
}
set
{
object[] Parameters = new object[1] { value };
m_ExcelApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, m_ExcelApp, Parameters);
}
} public Workbooks Workbooks
{
get
{
object workbooks = m_ExcelApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, m_ExcelApp, null);
if (workbooks == null)
throw new Exception("查询工作簿时失败!");
else
return new Workbooks(workbooks);
}
}
} public class Workbooks
{
private object m_Workbooks;
private string m_ExcelFileName; public Workbooks(object workbooks)
{
m_Workbooks = workbooks;
} public void Open(string ExcelFileName)
{
try
{
m_ExcelFileName = ExcelFileName;
object[] Parameters = new object[1] { ExcelFileName };
m_Workbooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, m_Workbooks, Parameters); }
catch (Exception err)
{
throw err;
}
} public Workbook this[int index]
{
get
{
object[] Parameters = new object[1]{index };
object workbook = m_Workbooks.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, m_Workbooks, Parameters);
if (workbook == null)
throw new Exception("获取工作薄时出现错误!");
else
return new Workbook(workbook);
}
}
} public class Workbook
{
private object m_Workbook;
public Workbook(object workbook)
{
m_Workbook = workbook;
} public Worksheets Worksheets
{
get
{
object worksheets = m_Workbook.GetType().InvokeMember("Worksheets", System.Reflection.BindingFlags.GetProperty, null, m_Workbook, null);
if (worksheets == null)
throw new Exception("获取工作表集合时失败!");
else
return new Worksheets(worksheets);
}
}
public void SaveAs(string FileName)
{
object[] Parameters = new object[1] { FileName };
m_Workbook.GetType().InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, m_Workbook, Parameters); }
}
public class Worksheets
{
private object m_Worksheets; public Worksheets ( object worksheets )
{
m_Worksheets = worksheets;
} public Worksheet this[int index]
{
get
{
object[] Parameters = new object[1] { index };
object worksheet = m_Worksheets.GetType().InvokeMember("Item", System.Reflection.BindingFlags.GetProperty, null, m_Worksheets, Parameters);
if (worksheet == null)
throw new Exception("获取工作表时出现错误!");
else
return new Worksheet(worksheet);
}
} } public class Worksheet
{
private object m_Worksheet;
public Worksheet ( object worksheet )
{
m_Worksheet = worksheet ;
} public Range this[ int row , int col ]
{
get
{
object[] Parameters = new Object[2] { row , col };
object cells = m_Worksheet.GetType().InvokeMember("Cells", System.Reflection.BindingFlags.GetProperty, null, m_Worksheet, Parameters);
if (cells == null)
throw new Exception("获取单元格失败!");
else
return new Range(cells);
}
}
public Range this[ int row , string col ]
{
get
{
object[] Parameters = new Object[2] { row, col };
object cells = m_Worksheet.GetType().InvokeMember("Cells", System.Reflection.BindingFlags.GetProperty, null, m_Worksheet, Parameters);
if (cells == null)
throw new Exception("获取单元格失败!");
else
return new Range(cells);
}
}
} public class Range
{
private object m_Range;
public Range(object Range)
{
m_Range = Range;
} public object Value
{
get
{
object result = m_Range.GetType().InvokeMember("Value", System.Reflection.BindingFlags.GetProperty, null, m_Range, null);
return result;
}
set
{
object[] Parameters = new Object[1] { value };
m_Range.GetType().InvokeMember("Value", System.Reflection.BindingFlags.SetProperty, null, m_Range, Parameters);
}
}
}}
试试这个类
这段时间在做一个项目时,遇到了操作EXCEL表的问题,查了不少资料,总结如下:
以下是一些对excel的一些基本操作
1:工程对excel类库的导入,如:c:\program files\Microsoft office\offiece11\excel.exe
2:命名控件的引入: using Microsoft.office.Interop.Excel;
3:如果是对一个已经存在的excel文件进行操作则:
Application app=new Application();
Workbook wbook=app.Workbooks.Open("c:\\temp.xls",Type.Missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing);
Worksheet worksheet=(Worksheet)wbook.Worksheets[1];
4:如果是新建一个excel文件:
Application app=new Application();
Workbook wbook=app.Workbook.Add(Type.missing);
Worksheet worksheet=(Worksheet)wbook.Worksheets[1];
5:设置某个单元格里的内容:
worksheet.Cells[1,2]="列内容"
6读取某个单元格里的内容
string temp=((Range)worksheet.Cells[1,2]).Text;
7设置某个单元格里的格式
Excel.Range rtemp=worksheet.get_Range("A1","A1");
rtemp.Font.Name="宋体";
rtemp.Font.FontStyle="加粗";
rtemp.Font.Size=5;
8 保存新建的内容:
worksheet.SaveAs("c:\\temp.xls",Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing); ------
另要注意用.net时,打开dataView时是默认新增了一条记录,这样的话,必须要在行号减去一条,这样才不会出现那烦人的“未设置对象实例”的错误。