C#导出Excel按照指定格式设置单元格属性值

转载 2016年05月31日 12:08:51

最近项目中一直在写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值:
C#导出Excel按照指定格式设置单元格属性值
选定区间设置字符串格式或数字格式:
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格式:
C#导出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 = 1;
            int colindex = 1;
            //保存文化环境
            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(1);
            worksheet.Name = "报表";//一个sheet的名称
            rptExcel.Visible = true;//打开导出的Excel文件

            worksheet.Cells[1, 1] = "27705";//模版号
            rowIndex++;
            //第二行内容
            Microsoft.Office.Interop.Excel.Range rangeinfo1 = worksheet.get_Range(worksheet.Cells[rowIndex, colindex + 6],worksheet.Cells[rowIndex, colindex + 7]);
            rangeinfo1.NumberFormat = "@";
            worksheet.Cells[rowIndex, colindex] = "S#262229";
            worksheet.Cells[rowIndex, colindex+6] = dt.Columns[13].ColumnName;
            worksheet.Cells[rowIndex, colindex + 7] = dt.Rows[0][13];
            worksheet.Cells[rowIndex, colindex+12] = "EAN";
            //合并打印数量单元格
            worksheet.Cells[rowIndex, columnCount+1] = "打印数量";
            worksheet.Cells[rowIndex, columnCount+2] = "包装数量";
            worksheet.get_Range(worksheet.Cells[rowIndex, columnCount + 1], worksheet.Cells[rowIndex + 2, columnCount + 1]).MergeCells = true;
            worksheet.get_Range(worksheet.Cells[rowIndex, columnCount + 2], worksheet.Cells[rowIndex + 2, columnCount + 2]).MergeCells = true;
            rowIndex++;
            //第三行内容
            worksheet.Cells[rowIndex, 1] = "貨名";
            worksheet.Cells[rowIndex, 2] = "Line";
            //合并第三行第二列
            worksheet.get_Range(worksheet.Cells[rowIndex, 2], worksheet.Cells[rowIndex+1, 2]).MergeCells = true;
            worksheet.Cells[rowIndex, 3] = "序號";
            worksheet.Cells[rowIndex, 4] = "數量";
            worksheet.Cells[rowIndex, 5] = "1 (EUR) size";
            worksheet.Cells[rowIndex, 6] = "1a (€)";
            worksheet.Cells[rowIndex, 7] = "2 (UK) size";
            worksheet.Cells[rowIndex, 8] = "2a (₤)";
            worksheet.get_Range(worksheet.Cells[rowIndex, 5], worksheet.Cells[rowIndex, 8]).Font.Bold = true;
            worksheet.Cells[rowIndex, 9] = "4";
            worksheet.Cells[rowIndex, 10] = "5";
            worksheet.Cells[rowIndex, 11] = "6";
            worksheet.Cells[rowIndex, 12] = "7";
            worksheet.Cells[rowIndex, 13] = "8(barcode)";
            worksheet.Cells[rowIndex, 14] = "9";
            worksheet.get_Range(worksheet.Cells[rowIndex, 5], worksheet.Cells[rowIndex, 8]).Font.ColorIndex = 5;
            rowIndex++;
            //填充列标题
            for (int i = 0; i < columnCount-1; i++)
            {
                if (i > 0)
                {
                    worksheet.Cells[rowIndex, i + 2] = dt.Columns[i].ColumnName;
                   

                }
                else
                {
                    worksheet.Cells[rowIndex, i+1] = dt.Columns[i].ColumnName;
                    
                }
            }
            rowIndex++;
           
            //创建对象数组存储DataTable的数据,这样的效率比直接将Datateble的数据填充worksheet.Cells[row,col]高
            object[,] objData = new object[rowCount, columnCount];
           
            //填充内容到对象数组
            for (int r = 0; r < rowCount; r++)
            {
                for (int col = 0; col < columnCount-1; 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, 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";
            range.Value2 = objData;

            for (int i = 0; i < rowCount; i++)
            {
                if (i > 0)
                {
                    
                    //计算打印数量
                    worksheet.Cells[rowIndex + i, columnCount+1] = "=CEILING(D" + (rowIndex + i).ToString() + "*1.01+1,2)";

                }
                else
                {
                   
                    worksheet.Cells[rowIndex + i, columnCount+1] = "=CEILING(D" + (rowIndex + i).ToString() + "*1.01+1,2)";
                }
            }
            
            //设置格式
            rptExcel.StandardFont = "新細明體";
            rptExcel.StandardFontSize = 12;
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowCount+rowIndex, columnCount]).Columns.AutoFit();//设置单元格宽度为自适应
            worksheet.get_Range(worksheet.Cells[1, 1], 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, 4] = "=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 = 0; 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 = 0; i < excelProcess.Count; i++)
            {
                excelProcess[i].Kill();
            }
        }

from: http://blog.sina.com.cn/s/blog_834dd3fa01013kw5.html

C#WinForm 使用StreamWriter导出数据成Excel文件。

2013-12-19 14:01 7433人阅读 评论(1) 收藏 举报  分类: .net(6)  版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • kasama1953
  • kasama1953
  • 2016年08月23日 10:32
  • 2400

DataGridView导出数据到Excel及单元格格式的修改

在软件开发过程中,时常会遇到把一些数据信息从DataGridView中导出到Excel表格中的情况,如果写的多了就会发现挺简单的,我们不妨来写一写,留作备用,毕竟有时候Ctrl+C和Ctrl+V还是比...
  • haovip123
  • haovip123
  • 2014年11月05日 16:51
  • 3812

C#中导出Excel的单元格属性设置

2、 Excel显示格式控制。 A、单元格格式设置,默认为常规类型;Excel 代码: Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1...
  • wangqifei521
  • wangqifei521
  • 2014年04月11日 15:09
  • 2796

C#导出Excel,并且设置Excel单元格格式,合并单元格.

注:要添加COM组件 Microsoft Excel 11.0 Object Library  引用。 具体代码如下: using System; using System.Coll...
  • smeyou
  • smeyou
  • 2014年03月21日 19:43
  • 12514

C#数据导出到Excel自定义样式

  • 2011年09月08日 10:27
  • 677KB
  • 下载

C#导出用户自定义Excel 导出模板Excel

弄了2天才弄出这个根据用户给定模板导出excel ///    /// 用户自定义导出excel   ///    /// 导出的excel的所在位置   /// 模板所在位置   /// 要导出数据...
  • cy609329119
  • cy609329119
  • 2009年12月29日 10:34
  • 3174

C#winform从数据集导出Excel(带指定Excel样式)

    利用数据集作为数据源,在winform中导出Excel。    1、首先要确保使用的机器安装Office工具。 然后在工程中添加如下引用。    2、建立一个强类型的数据集3、在这个强类型数据...
  • JimFire
  • JimFire
  • 2007年07月09日 18:16
  • 7030

C#导出Excel按照指定格式设置单元格属性值

转自:http://blog.csdn.net/u011981242/article/details/51544571 最近项目中一直在写XML、Table、Excel之间的转化。之前一直都...
  • fengxing11
  • fengxing11
  • 2016年10月19日 20:12
  • 1484

C#中设置Excel单元格格式

1、全表自动列宽   mysheet.Cells.Select();   mysheet.Cells.Columns.AutoFit();  2、合并      excelRa...
  • QingHeShiJiYuan
  • QingHeShiJiYuan
  • 2016年07月07日 09:56
  • 5869

C# 导出excel并设置格式

一.生成Exel的方法 生成Excel的方法为调用本地Office COM组件,操作Excel。新建项目后,添加对应Office版本的Microsoft.Office.Interop.Excel的...
  • lp244392323
  • lp244392323
  • 2011年12月15日 21:36
  • 1855
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#导出Excel按照指定格式设置单元格属性值
举报原因:
原因补充:

(最多只允许输入30个字)