首页 新闻 会员 周边

Excel 进行Copy

0
[已解决问题] 解决于 2010-05-12 18:00

大家好,

现在我有两个Excel知道存放地址,使用C#把Excel.xls进行复制给Exce2l.xls 使用OleDb能进行操作吗,大家帮忙看一下~

问题补充: 现在我有两个Excel一个是模板 .xls一个是要进行下载的.xls 现在我要模板 .xls的复制给下载的.xls string outFilexlsName = @"H3C.HCMM.Service\EmailTemplate\模板.xls"; Workbooks workbooks = app.Workbooks; _Workbook workbook = workbooks.Add(outFilexlsName); 到这就出错了。谁有好的方法能不能帮兄弟一下谢了 ! 报错内容 无法访问文件。请尝试下列方法之一: ? 确认所指定的文件夹已存在。 ? 确认文件所在的文件夹不是只读的。 ? 确认给出的文件名不包含下列字符: < > ? [ ] : 度量数据汇总.xls 或 * 。 ? 确认文件/路径名长度不超过 218 个字符。
yangyueming的主页 yangyueming | 初学一级 | 园豆:2
提问于:2010-05-12 09:34
< >
分享
最佳答案
0

把两个EXCEL都导入DataTable中,然后进行合并,再输出新的Excel,或覆盖“Exce2l.xls”。

#region 导入Excel文件
public static DataTable ImportExcel(string filePathName)
{
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath(filePathName) + ";Extended Properties=Excel 8.0";
    //链接Excel
    OleDbConnection cnnxls = new OleDbConnection(strConn);
    //读取Excel里面有 表Sheet1
    string abc = filePathName.Substring(filePathName.LastIndexOf("/") + 1);
    OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + abc + "$]", cnnxls);
    DataSet ds = new DataSet();
    //将Excel里面有表内容装载到内存表中!
    oda.Fill(ds);
    return ds.Tables[0];
}
#endregion

 

#region 根据传入的DataTable并导出为Excel文件(无HTML装饰)
/// <summary>
/// 根据传入的DataTable并导出为Excel文件
/// </summary>
/// <param name="dt">传入的DataTable</param>
/// <param name="fileName">文件名</param>
public static void ExportExcel(DataTable dt, string fileName)
{
    if (dt == null || dt.Rows.Count == 0) { return; }
    HttpContext.Current.Response.Clear();
    //Encoding pageEncode = Encoding.GetEncoding(PageEncode);
    HttpContext.Current.Response.Charset = "gb2312";
    //Response.ContentType = "application/vnd-excel";//"application/vnd.ms-excel";
    //Response.ContentType = "application/x-octet-stream";//"application/vnd.ms-excel";
    HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";//"text/csv";
    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
    System.IO.StringWriter oSW = new System.IO.StringWriter();
    HtmlTextWriter oHW = new HtmlTextWriter(oSW);
    DataGrid dg = new DataGrid();
    dg.DataSource = dt;
    dg.DataBind();
    dg.RenderControl(oHW);
    HttpContext.Current.Response.Write(oSW.ToString());
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
}
#endregion



Astar | 高人七级 |园豆:40805 | 2010-05-12 09:44
大哥你这种方法是不适用我的,我有Excle模板的,之前这种方法我也用过,谢了
yangyueming | 园豆:2 (初学一级) | 2010-05-12 10:07
@yangyueming:不好意思。
Astar | 园豆:40805 (高人七级) | 2010-05-12 14:10
@Astar:没事谢了!
yangyueming | 园豆:2 (初学一级) | 2010-05-12 14:26
其他回答(1)
0

你的 Excel 有模板,并且要保持格式?你只有用 Excel 互操作了,因为 OLEDB 只关心数据。Excel 有 Copy/Paste Sheet 之类的功能,你可以用互操作进行。

周巍 | 园豆:735 (小虾三级) | 2010-05-12 11:09
是我现在是用 workbook.SaveAs(FILE_NAME, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 这个去做的但现在用这个Copy的Excel 就报外部表不是预期格式,直接用那个模板就是正确的,郁闷死了,
支持(0) 反对(0) yangyueming | 园豆:2 (初学一级) | 2010-05-12 14:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册