解决方案 »
- 谁用过Lodop5.0啊??请教....
- 一个DataTable的处理问题.
- 如何判断用户点击了哪个控件?
- C#如何将窗体设置成非顶级控件
- PROCESS_ALL_ACCESS在C#中怎么定义
- VS.net页面上,鼠标一点html代码里就出来个<FONT face="宋体"></FONT>
- 多层结构下,Web层得到的值如何传递给其他层去处理
- 请问在C#中如何将自定义结构转换为字节数组?
- 请已经不是处男的来回答我这个问题!!!!!!!!!!!(其实很简单的,我就是想不出来)
- 使用VS2010调用CodeSmith 7.0自动生成Nhibernate代码,已引用CodeSmith命名空间,可系统还是报错
- mvc4 引用js日历控件问题
- 我新建一个线程,线程函数却没有执行。为什么?
http://blog.csdn.net/duanzi_peng/article/details/17414629
//加载绑定数据集合
private void Frm_Main_Load(object sender, EventArgs e)
{
dgv_Message.DataSource = new List<Fruit>() {//绑定数据集合
new Fruit(){Name="甘蔗",Price=30},
new Fruit(){Name="猕猴桃",Price=40},
new Fruit(){Name="菠萝",Price=33},
new Fruit(){Name="香蕉",Price=31}};
dgv_Message.Columns[0].Width = 200;//设置列宽度
dgv_Message.Columns[1].Width = 170;//设置列宽度
}
//导出到Excel文档
private Excel.Application G_ea;//定义Word应用程序字段
private object G_missing = //定义G_missing字段并添加引用
System.Reflection.Missing.Value; private void btn_OutPut_Click(object sender, EventArgs e)
{
List<Fruit> P_Fruit = new List<Fruit>();//创建数据集合
foreach (DataGridViewRow dgvr in dgv_Message.Rows)
{
P_Fruit.Add(new Fruit()//向数据集合添加数据
{
Name = dgvr.Cells[0].Value.ToString(),
Price = Convert.ToSingle(dgvr.Cells[1].Value.ToString())
});
}
SaveFileDialog P_SaveFileDialog =//创建保存文件对话框对象
new SaveFileDialog();
P_SaveFileDialog.Filter = "*.xls|*.xls";
if (DialogResult.OK ==//确认是否保存文件
P_SaveFileDialog.ShowDialog())
{
ThreadPool.QueueUserWorkItem(//开始线程池
(pp) =>//使用lambda表达式
{
G_ea = new Microsoft.Office.Interop.Excel.Application();//创建应用程序对象
Excel.Workbook P_wk = G_ea.Workbooks.Add(G_missing);//创建Excel文档
Excel.Worksheet P_ws = (Excel.Worksheet)P_wk.Worksheets.Add(//创建工作区域
G_missing, G_missing, G_missing, G_missing);
for (int i = 0; i < P_Fruit.Count; i++)
{
P_ws.Cells[i + 1, 1] = P_Fruit[i].Name;//向Excel文档中写入内容
P_ws.Cells[i + 1, 2] = P_Fruit[i].//向Excel文档中写入内容
Price.ToString();
}//CodeGo.net/
P_wk.SaveAs(//保存Word文件
P_SaveFileDialog.FileName, G_missing, G_missing, G_missing,
G_missing, G_missing, Excel.XlSaveAsAccessMode.xlShared, G_missing,
G_missing, G_missing, G_missing, G_missing);
((Excel._Application)G_ea.Application).Quit();//退出应用程序
this.Invoke(//调用窗体线程
(MethodInvoker)(() =>//使用lambda表达式
{
MessageBox.Show(//弹出消息对话框
"成功创建Excel文档!", "提示!");
}));
});
}
}
给你个我的helper类吧 public static class EPPlusHelper
{
/// <summary>
/// 得到工作薄中的工作表
/// </summary>
/// <param name="FilePath">文件路径</param>
/// <param name="sheetName">表名</param>
/// <returns>worksheet</returns>
public static ExcelWorksheet readExcelToWorkSheet(string FilePath, string sheetName)
{
ExcelWorksheet worksheet;
FileInfo existingFile = new FileInfo(FilePath);
using (ExcelPackage package = new ExcelPackage(existingFile))
{
// get the first worksheet in the workbook
worksheet = package.Workbook.Worksheets[sheetName];
}
return worksheet;
} /// <summary>
/// 得到工作薄中的工作表
/// </summary>
/// <param name="FilePath">文件路径</param>
/// <param name="sheetIndex">表序号,从1开始</param>
/// <returns>ExcelWorksheet</returns>
public static ExcelWorksheet readExcelToWorkSheet(string FilePath, int sheetIndex)
{
ExcelWorksheet worksheet;
FileInfo existingFile = new FileInfo(FilePath); try
{
using (ExcelPackage package = new ExcelPackage(existingFile))
{
// get the first worksheet in the workbook
worksheet = package.Workbook.Worksheets[sheetIndex];
}
return worksheet;
}
catch(Exception e)
{
MessageBox.Show(e.Message);
return null;
} }
/// <summary>
/// 添加数据到excel并保存
/// </summary>
/// <param name="strTempletExcel">模板Excel文件名,不含后缀</param>
/// <param name="strTargetExcel">目标文件名,不含后缀</param>
public static void writeDataToWorkSheet( string strTargetExcel, DataTable dt)
{
if (dt.Rows.Count == 0) return;
string strOutputDir = Config.strOutputDir;
DirectoryInfo outputDir = new DirectoryInfo(strOutputDir); FileInfo newFile = new FileInfo(outputDir.FullName + strTargetExcel + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx");
using (ExcelPackage pck = new ExcelPackage(newFile))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts");
ws.Cells["A1"].LoadFromDataTable(dt, true);
pck.Save();
} }
/// <summary>
/// 得到DataTable
/// </summary>
/// <param name="path">路径</param>
/// <returns>DataTable</returns>
public static DataTable getDataTableFromExcel(string path)
{
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
bool hasHeader = true; // adjust it accordingly( i've mentioned that this is a simple approach)
foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
var startRow = hasHeader ? 2 : 1;
for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
var row = tbl.NewRow();
// int i = 0;
foreach (var cell in wsRow)
{
if (cell.Value == null) continue;
row[cell.Start.Column - 1] = cell.Value.ToString();
}
tbl.Rows.Add(row);
}
return tbl;
}
}
}
这个组件好像也不是免费的,如果简单项目,使用NPOI 更轻便一些。
http://bbs.csdn.net/topics/390849080
http://download.csdn.net/detail/u010064760/7704159
那个页面我下载不了,请问下你能发一份到百度云,或者我邮箱。邮箱地址:[email protected]
谢谢了。