C#读写Excel文件相关技巧

开发 后端
这里将介绍一些C#读写Excel文件的相关技巧,毕竟Excel打印更为方便和实用。希望本文能对大家用好Excel有所帮助。

一直想小结一些C#读写Excel文件的相关技巧,毕竟Excel打印更为方便和实用,一个是Excel打印输出编码比Word文件打印数据简单些,另一个是Excel本身对数据超强计算处理功能;赶巧最近项目又涉及Excel报表统计打印的问题,所以在把其中的一些技术记录下来与大家一起分析讨论,次篇主要涉及两个方面内容:

1、C#读写Excel文件

A、设计Excel模版

B、打开一个目标文件并且读取模版内容

C、目标文件按格式写入需要的数据

D、保存并且输出目标Excel文件

2、 Excel对象资源释放,这个在以前项目没有注意彻底释放使用到Excel对象,对客户计算机资源造成一定浪费,此次得到彻底解决。

下面是一个C#读写Excel文件并打印输出的Demo

1、 创建一个叫DemoExcel的项目
 
2、 引用COM,包括:Microsoft.Excel.x.0.Object.Library,Microsoft.Office.x.0.Object.Library
 
建议安装正版OFFICE,而且版本在11.0以上(Office2003以上),引用以上两个Com后,在项目引用栏发现多了Excel、Microsoft.Office.Core,VBIDE三个 Library.

3、 下面建立一些模拟的数据,此处为街镇信息
 

  1.  using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. using Microsoft.Office.Interop.Excel;  
  9. using Microsoft.Office.Core;  
  10. using System.IO;  
  11. using System.Reflection;  
  12.  
  13. namespace DemoExcel  
  14. ...{  
  15.     public partial class Form1 : Form  
  16.     ...{  
  17.         private  object missing = Missing.Value;  
  18.         private Microsoft.Office.Interop.Excel.Application ExcelRS;  
  19.         private Microsoft.Office.Interop.Excel.Workbook RSbook;  
  20.         private Microsoft.Office.Interop.Excel.Worksheet RSsheet;  
  21.  
  22.         public Form1()  
  23.         ...{  
  24.             InitializeComponent();  
  25.         }  
  26.  
  27.         private void Form1_Load(object sender, EventArgs e)  
  28.         ...{  
  29.             // TODO: 这行代码将数据加载到表“dataSet1.STREET”中。您可以根据需要移动或移除它。  
  30.             this.sTREETTableAdapter.Fill(this.dataSet1.STREET);  
  31.  
  32.         }  
  33.  
  34.         private void button1_Click(object sender, EventArgs e)  
  35.         ...{  
  36.             string OutFilePath = System.Windows.Forms.Application.StartupPath + @" emp.xls";  
  37.              
  38.             string TemplateFilePath = System.Windows.Forms.Application.StartupPath + @"模版.xls";  
  39.             PrintInit(TemplateFilePath,OutFilePath);  
  40.         }  
  41.         Excle输出前初始化#region Excle输出前初始化  
  42.         /**////   
  43.         ///   
  44.         ///   
  45.         ///   
  46.         public bool PrintInit(string templetFile, string outputFile)  
  47.         ...{  
  48.             try 
  49.             ...{  
  50.                 if (templetFile == null)  
  51.                 ...{  
  52.                     MessageBox.Show("Excel模板文件路径不能为空!");  
  53.                     return false;  
  54.                 }  
  55.                 if (outputFile == null)  
  56.                 ...{  
  57.                     MessageBox.Show("输出Excel文件路径不能为空!");  
  58.                     return false;  
  59.                 }  
  60.                 //把模版文件templetFile拷贝到目输出文件outputFile中,并且目标文件可以改写  
  61.                 System.IO.File.Copy(templetFile, outputFile, true);  
  62.                 if (this.ExcelRS != null)  
  63.                     ExcelRS = null;  
  64.                 //实例化ExcelRS对象  
  65.                 ExcelRS = new Microsoft.Office.Interop.Excel.ApplicationClass();  
  66.                 //打开目标文件outputFile  
  67.                 RSbook = ExcelRS.Workbooks.Open(outputFile, missing, missing, missing, missing, missing,  
  68.                     missing, missing, missing, missing, missing, missing, missing, missing, missing);  
  69.                 //设置第一个工作溥  
  70.                 RSsheet = (Microsoft.Office.Interop.Excel.Worksheet)RSbook.Sheets.get_Item(1);  
  71.                 //激活当前工作溥  
  72.                 RSsheet.Activate();  
  73.                   
  74.                 在当前工作溥写入内容#region 在当前工作溥写入内容  
  75.                 for (int i = 0; i < this.dataGridView1.RowCount; i++)  
  76.                 ...{  
  77.                     RSsheet.Cells[3 + i, 1] = this.dataGridView1[0, i].Value.ToString();  
  78.                     RSsheet.Cells[3 + i, 2] = this.dataGridView1[1, i].Value.ToString();  
  79.                     RSsheet.Cells[3 + i, 3] = this.dataGridView1[2, i].Value.ToString();  
  80.                 }   
  81.                 #endregion  
  82.  
  83.                 //保存目标文件  
  84.                 RSbook.Save();  
  85.                 //设置DisplayAlerts  
  86.                 ExcelRS.DisplayAlerts = false;  
  87.                 ExcelRS.Visible = true;  
  88.                 //ExcelRS.DisplayAlerts = true;  
  89.  
  90.                 //释放对象  
  91.                 RSsheet = null;  
  92.                 RSbook = null;  
  93.                 ExcelRS = null;  
  94.                 //释放内存  
  95.                 GcCollect();  
  96.             }  
  97.             catch (Exception ex)  
  98.             ...{  
  99.                 MessageBox.Show(ex.ToString());  
  100.                 return false;  
  101.             }  
  102.             return true;  
  103.         }  
  104.         #endregion  
  105.         public void GcCollect()  
  106.         ...{  
  107.             GC.Collect();  
  108.             GC.WaitForPendingFinalizers();  
  109.             GC.Collect();  
  110.             GC.WaitForPendingFinalizers();  
  111.         }  
  112.     }  

特别说明:

a、引用Microsoft.Office.Interop.Excel;using Microsoft.Office.Core;

b、(关键)在程序中特别释放Excel资源的时候既要设置对象为null,又要强制回收内存,这样才能彻底回收资源。

c、引用的Office组建版本是个敏感问题,不同版本之间有细微差别,需要分别处理。

本文来自曾玄昴CSDN博客中的文章《C#读写Excel文档(---续C#读写Word文件)

【编辑推荐】

  1. C#运算符重载实现复数运算
  2. C#运算符重载实例解析
  3. C#运算符重载的一些总结
  4. C#运算符重载“>”的操作浅析
  5. C#运算符优先级介绍
责任编辑:彭凡 来源: CSDN博客
相关推荐

2009-08-07 13:30:20

C# Excel导入

2009-08-13 09:34:55

C#读写ini文件

2009-08-12 14:01:17

C# Excel编程技

2009-08-07 18:07:58

C#数据库开发

2009-09-01 14:39:47

C#创建Excel文件

2009-09-02 14:06:14

C#文件传送

2009-09-02 14:00:34

C#文件处理

2009-08-11 14:36:41

C#读取Excel

2009-08-07 12:12:00

C#读取Excel文件

2009-08-14 16:08:34

读写BinaryC#编程实例

2021-12-01 07:19:44

C# Npoi Excel

2009-08-27 16:54:59

C#开发技巧

2009-08-11 15:44:05

C#基本技巧

2009-12-18 09:27:23

Ruby读写excel

2009-08-20 10:53:23

C#操作内存

2011-05-20 15:37:05

MemoryStrea

2010-01-18 10:16:58

学习C++

2009-08-18 13:49:21

C# 操作Excel

2009-08-05 18:39:54

C#异常类

2009-08-28 10:22:47

C# DLLImpor
点赞
收藏

51CTO技术栈公众号