最近项目中一直在写XML、Table、Excel之间的转化。之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样。为了一个单元格文字变色纠结了很久。下面把学习资料发出,希望对新手学习有所帮助:

下面是会用到的导出属性。

合并单元格属性:

worksheet.get_Range(worksheet.Cells[rowIndex, columnCount + 1], worksheet.Cells[rowIndex + 2, columnCount + 1]).MergeCells = true;
 
设置某一个单元格中字体的颜色:
worksheet.get_Range(worksheet.Cells[rowIndex, 5], worksheet.Cells[rowIndex, 8]).Font.ColorIndex = 5;(这个在网上找的一直变不了色,后面自己试出来了)
字体颜色的index值:
选定区间设置字符串格式或数字格式:
Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range(worksheet.Cells[rowIndex, 1], worksheet.Cells[rowCount+rowIndex-1, columnCount-1]);
            range.NumberFormat = "@";//设置数字文本格式
            Microsoft.Office.Interop.Excel.Range rangeinfo = worksheet.get_Range(worksheet.Cells[rowIndex, 4], worksheet.Cells[rowCount + rowIndex - 1, 4]);
            rangeinfo.NumberFormat = "00";
用于汇总和计算时(所计算的字段值必须是数字格式):
worksheet.Cells[rowIndex + i, columnCount+1] = "=CEILING(D" + (rowIndex + i).ToString() + "*1.01+1,2)"; i是变量
 
PS:一下代码则可导出如下图的Excel格式:
 
// 导出为Excel格式文件
/// </summary>
/// <param name="dt">作为数据源的DataTable</param>
/// <param name="saveFile">带路径的保存文件名</param>
/// <param name="title">一个Excel sheet的标题</param>
public static void DataTabletoExcel(System.Data.DataTable dt, string saveFile)
{
Microsoft.Office.Interop.Excel.Application rptExcel = new Microsoft.Office.Interop.Excel.Application();
if (rptExcel == null)
{
PublicClass.HintBox("无法打开EXcel,请检查Excel是否可用或者是否安装好Excel");
return;
} int rowCount = dt.Rows.Count;//行数
int columnCount = dt.Columns.Count;//列数
int rowIndex = ;
int colindex = ;
//保存文化环境
System.Globalization.CultureInfo currentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); Microsoft.Office.Interop.Excel.Workbook workbook = rptExcel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets.get_Item();
worksheet.Name = "报表";//一个sheet的名称
rptExcel.Visible = true;//打开导出的Excel文件 worksheet.Cells[, ] = "";//模版号
rowIndex++;
//第二行内容
Microsoft.Office.Interop.Excel.Range rangeinfo1 = worksheet.get_Range(worksheet.Cells[rowIndex, colindex + ],worksheet.Cells[rowIndex, colindex + ]);
rangeinfo1.NumberFormat = "@";
worksheet.Cells[rowIndex, colindex] = "S#262229";
worksheet.Cells[rowIndex, colindex+] = dt.Columns[].ColumnName;
worksheet.Cells[rowIndex, colindex + ] = dt.Rows[][];
worksheet.Cells[rowIndex, colindex+] = "EAN";
//合并打印数量单元格
worksheet.Cells[rowIndex, columnCount+] = "打印数量";
worksheet.Cells[rowIndex, columnCount+] = "包装数量";
worksheet.get_Range(worksheet.Cells[rowIndex, columnCount + ], worksheet.Cells[rowIndex + , columnCount + ]).MergeCells = true;
worksheet.get_Range(worksheet.Cells[rowIndex, columnCount + ], worksheet.Cells[rowIndex + , columnCount + ]).MergeCells = true;
rowIndex++;
//第三行内容
worksheet.Cells[rowIndex, ] = "貨名";
worksheet.Cells[rowIndex, ] = "Line";
//合并第三行第二列
worksheet.get_Range(worksheet.Cells[rowIndex, ], worksheet.Cells[rowIndex+, ]).MergeCells = true;
worksheet.Cells[rowIndex, ] = "序號";
worksheet.Cells[rowIndex, ] = "數量";
worksheet.Cells[rowIndex, ] = "1 (EUR) size";
worksheet.Cells[rowIndex, ] = "1a (€)";
worksheet.Cells[rowIndex, ] = "2 (UK) size";
worksheet.Cells[rowIndex, ] = "2a (₤)";
worksheet.get_Range(worksheet.Cells[rowIndex, ], worksheet.Cells[rowIndex, ]).Font.Bold = true;
worksheet.Cells[rowIndex, ] = "";
worksheet.Cells[rowIndex, ] = "";
worksheet.Cells[rowIndex, ] = "";
worksheet.Cells[rowIndex, ] = "";
worksheet.Cells[rowIndex, ] = "8(barcode)";
worksheet.Cells[rowIndex, ] = "";
worksheet.get_Range(worksheet.Cells[rowIndex, ], worksheet.Cells[rowIndex, ]).Font.ColorIndex = ;
rowIndex++;
//填充列标题
for (int i = ; i < columnCount-; i++)
{
if (i > )
{
worksheet.Cells[rowIndex, i + ] = dt.Columns[i].ColumnName; }
else
{
worksheet.Cells[rowIndex, i+] = dt.Columns[i].ColumnName; }
}
rowIndex++; //创建对象数组存储DataTable的数据,这样的效率比直接将Datateble的数据填充worksheet.Cells[row,col]高
object[,] objData = new object[rowCount, columnCount]; //填充内容到对象数组
for (int r = ; r < rowCount; r++)
{
for (int col = ; col < columnCount-; col++)
{
objData[r, col] = dt.Rows[r][col].ToString();
} System.Windows.Forms.Application.DoEvents();
} //将对象数组的值赋给Excel对象
Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range(worksheet.Cells[rowIndex, ], worksheet.Cells[rowCount+rowIndex-, columnCount-]);
range.NumberFormat = "@";//设置数字文本格式
Microsoft.Office.Interop.Excel.Range rangeinfo = worksheet.get_Range(worksheet.Cells[rowIndex, ], worksheet.Cells[rowCount + rowIndex - , ]);
rangeinfo.NumberFormat = "";
range.Value2 = objData; for (int i = ; i < rowCount; i++)
{
if (i > )
{ //计算打印数量
worksheet.Cells[rowIndex + i, columnCount+] = "=CEILING(D" + (rowIndex + i).ToString() + "*1.01+1,2)"; }
else
{ worksheet.Cells[rowIndex + i, columnCount+] = "=CEILING(D" + (rowIndex + i).ToString() + "*1.01+1,2)";
}
} //设置格式
rptExcel.StandardFont = "新細明體";
rptExcel.StandardFontSize = ;
worksheet.get_Range(worksheet.Cells[, ], worksheet.Cells[rowCount+rowIndex, columnCount]).Columns.AutoFit();//设置单元格宽度为自适应
worksheet.get_Range(worksheet.Cells[, ], worksheet.Cells[rowCount+rowIndex, columnCount]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;//居中对齐
//worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnCount]).Font.Bold = true;
//worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnCount]).Font.Color= ConsoleColor.Blue;
// worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[rowCount + 2, columnCount]).Borders.LineStyle = 1;//设置边框
//汇总
rowIndex = rowCount + rowIndex;
worksheet.Cells[rowIndex, ] = "=SUM(D5:D10)"; //恢复文化环境
System.Threading.Thread.CurrentThread.CurrentCulture = currentCI;
try
{
//rptExcel.Save(saveFile); //自动创建一个新的Excel文档保存在“我的文档”里,如果不用SaveFileDialog就可用这种方法
workbook.Saved=true;
workbook.SaveCopyAs(saveFile);//以复制的形式保存在已有的文档里
PublicClass.HintBox("数据已经成功导出为Excel文件!");
}
catch (Exception ex)
{
PublicClass.HintBox("导出文件出错,文件可能正被打开,具体原因:" + ex.Message);
}
finally
{
dt.Dispose();
rptExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(rptExcel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
GC.Collect();
KillAllExcel();
}
}
/// <summary>
/// 获得所有的Excel进程
/// </summary>
/// <returns>所有的Excel进程</returns>
private static List<Process> GetExcelProcesses()
{
Process[] processes = Process.GetProcesses();
List<Process> excelProcesses = new List<Process>(); for (int i = ; i < processes.Length; i++)
{
if (processes[i].ProcessName.ToUpper() == "EXCEL")
excelProcesses.Add(processes[i]);
} return excelProcesses;
}
private static void KillAllExcel()
{
List<Process> excelProcess = GetExcelProcesses();
for (int i = ; i < excelProcess.Count; i++)
{
excelProcess[i].Kill();
}
}

C#导出Excel按照指定格式设置单元格属性值的更多相关文章

  1. excel如何用公式判断单元格的值是否为数字、英文、中文,以及相应的计数

    一.excel如何用公式判断单元格的值是否为数字.英文.中文. A列为数据列,B列为判断列=LOOKUP(CODE(ASC(A1)),{48,65,123;"数字","英 ...

  2. 填报表导出excel后不可写的单元格处于锁定状态

     填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作. 报表导出为excel时,润乾导出excel包默认情况下不对excel单 ...

  3. C#DataTable导出Excel,并实现合并单元格

    asp.net webwofrm后台代码----------建议Framework4.0及以上,3.5试过出现好多莫名错误... 首先导入两个程序集.我的是 office2003,引用的COM里面的  ...

  4. 导出excel按照指定格式

    1.项目有个需求,要按照特定格式 导出Excel表格. 正常的都是一行 ,下面是数据.这次有个变动,就是每隔 几列要换行,下面是数据.在下面是数据部分.花了一上午写了下需求,不难但是花时间 //实现特 ...

  5. python从数据库取数据后写入excel 使用pandas.ExcelWriter设置单元格格式

    用python从数据库中取到数据后,写入excel中做成自动报表,ExcelWrite默认的格式一般来说都比较丑,但workbook提供可以设置自定义格式,简单记录个demo,供初次使用者参考. 一. ...

  6. pandas 设置单元格的值

    import pandas as pd import pickle import numpy as np dates = pd.date_range() df = pd.DataFrame(np.ar ...

  7. 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

    本篇文章小编为大家介绍,用NPOI创建Excel.合并单元格.设置单元格样式.边框的方法.需要的朋友参考下 今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Ex ...

  8. 导出EXCEL设置单元格格式

    怎么设置导出的EXCEL文件的列格式 如何设置导出的EXCEL文件的列格式在office的EXCEL中我们可以在一个EXCEL文件中,选中一列再点击鼠标右键,选择设置单元格格式,可以将这一列设为文本格 ...

  9. Excel导出时设置单元格的格式为文本

    问题: 用excel导出数据时,如何设置单元格格式的数字分类为"文本",默认是"常规"? 比如:导出编码0235A089,在Excel查看默认显示的是没有前面的 ...

随机推荐

  1. ARM GNU常用汇编语言介绍

    ARM GNU常用汇编语言介绍 ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令组成. ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令. 伪操作,是ARM汇编语言程序里的一些特殊 ...

  2. Shell执行将脚本里的变量打印到指定日志文件

    首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没 ...

  3. Android开发日记(三)

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...

  4. dp之二维背包hdu3496

    题意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0: 思路:这个题目可以很明 ...

  5. addEventListener()绑定事件的对象方法。

    addEventListener()绑定事件的对象方法.addEventListener()含有三个参数,一个是事件名称,另一个是事件执行的函数,最后一个是事件捕获,, obj.addEventLis ...

  6. Java并发(二)多线程的好处

    即使编写多线程程序具有挑战性,但它仍在使用中,是因为它可以带来如下的好处: 更好的资源利用 在某些场景下程序的设计会更简单 提升程序的响应性 更好的资源利用 假设一个应用会从本地文件系统中读取和处理文 ...

  7. 【C】——压缩字符串

    编一个函数,输入一个字符串,要求做一个新字符串,把其中所有的一个或多个连续的空白字符都压缩为一个空格.这里所说的空白包括空格.'\t'.'\n'.'\r'.例如原来的字符串是: This Conten ...

  8. laravel 5.1 性能优化对比 - 框架提供的方法

    写了一个项目发现性能不如人意. 于是便测试下, 看下性能瓶颈在什么地方. 使用 ab -n 20 http://www.lartest.com/ 软件环境: OS : windows 8.1 CPU: ...

  9. Unix 系统下的 Nginx 1.4.x

    Unix 系统下的 Nginx 1.4.x 本文档包括使用 PHP-FPM 为 Nginx 1.4.x HTTP 服务器安装和配置 PHP 的说明和提示. 本指南假定您已经从源代码成功构建 Nginx ...

  10. 关于Unity中stretch的分开使用、预制体、Scroll View的UI节点

    一.上次讲的菊花的四个花瓣,只讲了四个花瓣和在一起的时候的作用,现在是分开的菊花的四个花瓣的作用 1.创建一个Canvas2.对Canvas进行初始化3.创建一个Image的UI节点作为Canvas的 ...