C# COM组件操作Excel

原创 2015年07月08日 22:49:13

一、使用微软COM组件读Excle

将Excle中的变量信息读入varInfoDic, 其定义如下:

Dictionary<int, List<VarInfo>> varInfoDic = new Dictionary<int, List<VarInfo>>();

VarInfo的定义如下:

    public class VarInfo

    {

        public string varType;

        public string varName;

        public int varByteOffset;

    }

这个读Excle的函数,实现如下:

private void readVarInfoXLSX()
{
	int canId = 0;
	string strCanId;
	string strVarByteOffset;
	Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
	Workbook tempWorkbook = null;
	Worksheet tempSheet = null;
	Range tempRange = null;

	try
	{
		if (varInfoDic.Count != 0)
		{
			varInfoDic.Clear();
		}

		if (canIdValidList.Count != 0)
		{
			canIdValidList.Clear();
		}

		// 打开Excel文件
		tempWorkbook = excelApp.Workbooks.Open(varInfoFile, Missing.Value, Missing.Value, Missing.Value,
			Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
			Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

		excelApp.Visible = false;  //false
		// 获取第一个sheet
		tempSheet = (Worksheet)tempWorkbook.Sheets[1];
		tempSheet.Activate();

		for (int row = varInfoValidStartRow; row <= tempSheet.UsedRange.Rows.Count; row++)
		{
			VarInfo tempVarInfo = new VarInfo();
			tempRange = (Range)tempSheet.Cells[row, 1];
			strCanId = tempRange.Text.ToString().Trim();

			if (!string.IsNullOrWhiteSpace(strCanId))
			{
				canId = Convert.ToInt32(strCanId, 16);
				tempRange = (Range)tempSheet.Cells[row, 2];
				tempVarInfo.varType = tempRange.Text.ToString().Trim();
				if (!canIdValidList.Contains(canId))
				{
					canIdValidList.Add(canId);
				}
				
				tempRange = (Range)tempSheet.Cells[row, 3];
				tempVarInfo.varName = tempRange.Text.ToString().Trim();

				tempRange = (Range)tempSheet.Cells[row, 4];
				strVarByteOffset = tempRange.Text.ToString().Trim();
				tempVarInfo.varByteOffset = Convert.ToInt32(strVarByteOffset);

				if (varInfoDic.ContainsKey(canId))
				{
					List<VarInfo> tempList;
					varInfoDic.TryGetValue(canId, out tempList);
					tempList.Add(tempVarInfo);
				}
				else
				{
					List<VarInfo> tempVarInfoList = new List<VarInfo>();
					tempVarInfoList.Add(tempVarInfo);
					varInfoDic.Add(canId, tempVarInfoList);
				}
			}
			else
			{
				//待加入容错处理
				continue;
			}
		}
	}
	catch (Exception ex)
	{
		MessageBox.Show("Read variable information error! Please do it again!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
		Console.WriteLine("[readVarInfoXLSX] Function Error!");
	}
	finally
	{
		// 释放资源
		tempSheet = null;
		tempWorkbook.Close();
		tempWorkbook = null;
		excelApp.Workbooks.Close();
		excelApp.Quit();
		excelApp = null;
	}
}

二、使用微软COM组件写Excle

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#导出数据到Excel的两种方式:基于COM组件和NPIO

基于项目需求,需要将程序中的数据导出到Excel表格中,我在网上发现有很多这方面的资料,比较常见的是基于COM组件的,即使用之后 Microsoft.Office.Interop.Excel.Appl...

C#导出数据到Excel的两种方式:基于COM组件和NPIO

基于项目需求,需要将程序中的数据导出到Excel表格中,我在网上发现有很多这方面的资料,比较常见的是基于COM组件的,即使用之后 Microsoft.Office.Interop.Excel.Appl...

C#操作Word导致 “Microsoft.Office.Interop.Word.ApplicationClass”的 COM 组件错误的解决方法

C#操作Word导致“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 组件错误的解决方法 首先,要知道在C#中我们是通过调用COM组件来操作W...

C# 操作PDFCreator 引发 检索COM类工厂中CLSID为{}的组件时失败...

自己一个小型的Winform项目中有使用到PDFCreator虚拟打印,在初始化PDFCreator虚拟打印机模块代码中, private void initPdfPrinter() ...

.net C# COM组件,实现EXCEL自动转换格式与如何退出EXCEL Process

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst...
  • kywds
  • kywds
  • 2012-04-30 10:20
  • 323

C#使用COM操作Excel类

  • 2013-08-06 10:23
  • 16KB
  • 下载

MyXLS(C#操作Excel)组件

  • 2009-07-07 15:01
  • 5.97MB
  • 下载

C#中操作Excel(5)—— 操作Excel的两种技术(一)--COM技术

一、引言         本文主要介绍操作Excel的两种技术,第一种就是我们之前的文章中一直在使用的COM技术,而另一种是使用OLEDB技术。两种方法各有优势和缺点,前者利用COM接口操作Excel...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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