开源分享
最近一个客户要做一个将数据直接输出到指定格式的Excel模板中,略施小计,搞定

其中包含了对Excel的增行和删行,打印预览,表头,表体,表尾的控制

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using System.IO;
using System.Windows.Forms; namespace UFIDA.U8.UAP.QW.Common
{
/// <summary>
/// Excel操作管理
/// </summary>
public class ExcelHandler
{ #region 按模板导出
/// <summary>
/// 导出至模板
/// </summary>
/// <param name="type">类型{市场费:0,代理费:1}</param>
/// <param name="dt">数据源</param>
/// <returns>失败信息errorMsg</returns>
public string ExportModel(int type, DataTable dt)
{
//选择保存路径
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
return "";
string errorMsg = string.Empty;
string fileName = type == ? "代理费打印模板" : "市场费打印模板";
string path = Path.GetFullPath(@"Temp\" + fileName + ".xlsx");
string savaPath = fbd.SelectedPath;
savaPath=savaPath.EndsWith("\\")?savaPath:savaPath+"\\";
savaPath += fileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
//需要添加 Microsoft.Office.Interop.Excel引用
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
try
{
app.Visible = false;
app.UserControl = true;
Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(path); //加载模板
Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(); //第一个工作薄。
if (worksheet == null)
{
errorMsg = "工作薄中没有工作表";
return errorMsg;
}
int rowIndex = ;
//写入数据,Excel索引从1开始。
//foreach (DataRow row in dt.Rows)
//{
if (rowIndex ==)
{
#region head
worksheet.Cells[, ] = "客户编码1";//row["产品名称"].ToStr();
worksheet.Cells[, ] = "客户名称1";//row["产品名称"].ToStr(); #endregion #region bottom #endregion
} #region body
worksheet.Cells[rowIndex, ] = "产品名称1";//row["产品名称"].ToStr();
worksheet.Cells[rowIndex, ] = "规格型号1";//row["规格型号"].ToStr();
worksheet.Cells[rowIndex, ] = 1001.0000;//row["结算数量"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1002.0000;//row["销售单价"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1003.0000;//row["销售金额"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1004.0000;//row["结算单价"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1005.0000;//row["差价"].ToStr().ToDouble();
worksheet.Cells[rowIndex, ] = 1006.0000;//row["应付费用"].ToStr().ToDouble();
#endregion rowIndex++;
InsertRows(worksheet, rowIndex); //} //调整Excel的样式。
//Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[dt.Rows.Count + 2, 8]);
//rg.Borders.LineStyle = 1; //单元格加边框。
worksheet.Columns.AutoFit(); //自动调整列宽。
//Missing 在System.Reflection命名空间下。
workbook.SaveAs(savaPath, 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);
//workbook.PrintPreview(true);//打印预览,前提是app.Visible = true,否则看不到;
}
catch (Exception ex)
{
errorMsg += ex.Message;
}
finally
{
//最后一定要退出
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
GC.Collect();
}
return errorMsg;
}
/// <summary>
/// 在工作表中插入行,并调整其他行以留出空间
/// </summary>
/// <param name="sheet">工作簿</param>
/// <param name="rowIndex">行索引</param>
private void InsertRows(Microsoft.Office.Interop.Excel._Worksheet sheet, int rowIndex)
{
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)sheet.Rows[rowIndex, missing];
//object Range.Insert(object shift, object copyorigin);
//shift: Variant类型,可选。指定单元格的调整方式。可以为下列 XlInsertShiftDirection 常量之一:
//xlShiftToRight 或 xlShiftDown。如果省略该参数,Microsoft Excel 将根据区域形状确定调整方式。
range.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, missing);
} /// <summary>
/// 在工作表中删除行
/// </summary>
/// <param name="sheet">工作簿</param>
/// <param name="rowIndex">行索引</param>
private void DeleteRows(Microsoft.Office.Interop.Excel.Worksheet sheet, int rowIndex)
{
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)sheet.Rows[rowIndex, missing];
range.Delete(Microsoft.Office.Interop.Excel.XlDeleteShiftDirection.xlShiftUp);
} #endregion
}
}

C#导出数据至excel模板的更多相关文章

  1. 一个很好的用C#导出数据到Excel模板的方法

    /// <summary> /// 导数据到Excel模板 /// </summary> /// <param name="tab">要输出内容 ...

  2. c# 导出数据到Excel模板

    最近在做一个发邮件的功能,客户要求需要导出一个Excel附件,并给了附件的格式, eg: Last Name 姓 First Name 名 Chinese Characters汉字书写(仅大陆人填写) ...

  3. C# 导出数据到Excel模板中(转)

    今天做报表的时候遇到了多表头的问题,而且相应的报表的格式都一样.所以就采用了报表模板的方式来进行. 第一步:在开发的当前项目中引入:Microsoft.Office.Interop.Excel:Sys ...

  4. C#导出数据的EXCEL模板设计

    一:将如下图中,查询出来的数据导出到EXCEL中 二:Excel的状态 三:设计的背后工作 四:最后一步,隐藏

  5. (原创)将Datatable数据按照Excel模板格式导出

    最近遇到一个问题,就是导出数据的时候需要自定义的表头,如图 如果自己用代码写表头的话,可能会有点复杂,而且代码量很多,所以我就想了一个办法,直接在Excel里面把表头定义好,然后把数据写入Excel模 ...

  6. 使用Open xml 操作Excel系列之二--从data table导出数据到Excel

    由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...

  7. Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented

    在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...

  8. 手把手教你springboot中导出数据到excel中

    手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...

  9. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...

随机推荐

  1. Java 打印堆栈的几种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. 资源下载南方cass视频教程,包括文档,数据,很全的

    废话就不多说了,开始... 北方cass视频教程,包括文档,数据,很全的 视频下载地址:http://www.400gb.com/file/23459263 GIS网盘进入下载:http://laoh ...

  3. C++ Primer 学习笔记_46_STL实践与分析(20)--容器特有的算法

    STL实践与分析 --容器特有的算法 与其它顺序容器所支持的操作相比,标准库为list容器定义了更精细的操作集合,使它不必仅仅依赖于泛型操作.当中非常大的一个原因就是list容器不是依照内存中的顺序进 ...

  4. xiaoxia的vim配置

    这样已经很强大了 set nu sts=4 ts=4 sw=4 et si ai set ruler set hlsearch syntax on filetype plugin on

  5. svn cleanup failed–previous operation has not finished 解决方法

    今天svn遇到一个头疼的问题,最开始更新的时候失败了,因为有文件被锁住了.按照以往的操作,我对父目录进行clean up操作,但是clean up 操作也失败了! svn cleanup failed ...

  6. Android 和 PHP 之间进行数据加密传输

    Android 和 PHP 之间进行数据加密传输 [代码] [Java]代码 1 mcrypt = new MCrypt(); 2 /* Encrypt */ 3 String encrypted = ...

  7. 关于JS加载的问题

    一些绑定事件之类的行为,如果让他放于外部文件中,或者头部,则会引起所需的内容没有加载出来,找不到Element,导致实现失败.解决这一问题的办法主要采用window.onload事件进行处理,因为在w ...

  8. PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况

    0x01 背景 首先恭喜Seay法师的力作<代码审计:企业级web代码安全架构>,读了两天后深有感触.想了想自己也做审计有2年了,决定写个PHP代码审计实例教程的系列,希望能够帮助到新人更 ...

  9. 关于android listview去掉分割线

    1.设置android:divider="@null" 2.android:divider="#00000000" #00000000后面两个零表示透明 3.. ...

  10. C++对象内存模型1(堆栈模型)

    对象内存模型 一. 栈(Stack) VS. 堆(heap) 栈 由系统自动管理,以执行函数为单位 空间大小编译时确定(参数+局部变量) 函数执行时,系统自动分配一个stack 函数执行结束时,系统立 ...