Excel的Range对象(C#)_铁血柔情_新浪博客

mikel阅读(1608)

Excel的Range对象(C#)_铁血柔情_新浪博客,铁血柔情,

来源: Excel的Range对象(C#)_铁血柔情_新浪博客

Range 对象是 Excel 应用程序中最经常使用的对象;在操作 Excel 内的任何区域之前,都需要将其表示为一个 Range 对象,然后使用该 Range 对象的方法和属性。一个 Range 对象代表一个单元格、一行、一列、包含一个或者更多单元块(可以是连续的单元格,也可以式不连续的单元格)的选定单元格,甚至是多个工作表上的一组单元格。

在代码中引用范围。

Address 属性:这个属性返回范围坐标的字符串,坐标以下面几种格式之一表示,包括:“$A$1”(单元格在位置 A1)、“$1”(在工作表的第一行)和“$A$1:$C$5”(范围包括介于 A1 和 C5 之间矩形内的所有单元格)。“$”表示绝对坐标(而非相对坐标)。

Excel.Worksheet ws = (Excel.Worksheet)ThisWorkbook.Worksheets[1];
Excel.Range rng;
rng = ThisApplication.ActiveCell;
rng = ws.get_Range("A1", Type.Missing);//使用对象的 Range 属性指定一个区域
rng = ws.get_Range("A1:B12", Type.Missing);//使用对象的 Range 属性指定一个区域
rng = (Excel.Range)ws.Cells[1, 1];//使用工作表的 Cells 属性,指定单个行和列值
rng = ThisApplication.Range("SomeRangeName", Type.Missing);//引用一个命名范围

rng = ws.Range("A1", "C5")//直接引用范围的 Cells、Rows 或 Columns 属性,作用相同
rng = ws.Range("A1", "C5").Cells
rng = ws.Range("A1", "C5").Rows
rng = ws.Range("A1", "C5").Columns
rng = (Excel.Range)ws.Rows[1, Type.Missing];//引用特定行或特定列或行和列的范围
rng = (Excel.Range)ws.Rows["1:3", Type.Missing];
rng = (Excel.Range)ws.Columns[3, Type.Missing];
//Application 对象的 Selection 属性返回与选定单元格对应的范围
rng = (Excel.Range)ThisApplication.Selection;

//创建一个包含其他两个合并范围的范围(在引号内指定两个范围,并用逗号隔开)
rng = ThisApplication.get_Range("A1:D4, F2:G5", Type.Missing);//与后三行效果相同
rng1 = ThisApplication.get_Range("A1", "D4");
rng2 = ThisApplication.get_Range("F2", "G5");
rng = ThisApplication.Union(rng1, rng2, Type.Missing, Type.Missing, ……);
//创建一个引用其他两个范围重叠部分的范围(在引号内指定两个范围,并不使用分隔符)
rng = ThisApplication.get_Range("A1:D16 B2:F14", Type.Missing);//与后三行效果相同
rng1 = ThisApplication.get_Range("A1", "D16");
rng2 = ThisApplication.get_Range("B2", "F14");
rng = ThisApplication.Intersect(rng1, rng2,Type.Missing, Type.Missing, Type.Missing, Type.Missing,……);
//使用范围的 Offset 属性取得相对于初始范围的一个偏移
rng = (Excel.Range) ws.Cells[1, 1];
for (int i = 1; i <= 5; i++)
{
rng.get_Offset(i, 0).Value2 = i.ToString();
}
//使用范围的 CurrentRegion 属性取得一个代表当前区域的范围,这个当前区域由最近的空行和列限定,即连接在一起的单元格
ThisApplication.get_Range("C3", Type.Missing).CurrentRegion.Font.Bold = true;
//使用范围的 Areas 属性取得范围集合,其中每个范围对应于范围内容的一个区域
rng = ThisApplication.get_Range("Test", Type.Missing);
for (int i = 1; i <= rng.Areas.Count; i++)
{
MessageBox.Show(
rng.Areas[i].get_Address(Type.Missing, Type.Missing,
Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
}
//使用 End 属性,以及一个 XlDirection 枚举值(xlUp、xlToRight、xlToLeft、xlDown)来取得一个代表区域末端单元格的范围(即四个方向上离该选中范围最远的单元格)
Excel.Range rngLeft, rngRight, rngUp, rngDown;
rng = (Excel.Range) ThisApplication.Selection;
rngRight = rng.get_End(Excel.XlDirection.xlToRight);
rngLeft = rng.get_End(Excel.XlDirection.xlToLeft);
rngUp = rng.get_End(Excel.XlDirection.xlUp);
rngDown = rng.get_End(Excel.XlDirection.xlDown);
//使用 EntireRow 或 EntireColumn 属性引用包含特定范围的行或列
rng = ThisApplication.get_Range("Test", Type.Missing);
rng.Areas[2].EntireRow.Font.Bold = true;

在代码中操作范围。

自动填充:AutoFill
查找:Find
排序:Sort
Cells 获取一个 Range 对象,该对象表示工作表上的所有单元格(不仅仅是当前正在使用的单元格)。
Cells[行,列]

Columns 获取一个表示工作表上的所有列的 Range 对象
Rows 获取一个表示工作表上的所有行的 Range 对象

树莓派Raspbian系统迎来全新桌面环境--PIXEL

mikel阅读(1422)

来源: 树莓派Raspbian系统迎来全新桌面环境–PIXEL

    今天树莓派基金会Simon Long非常开心的宣布,面向树莓派设备基于Debian的Raspbian GNU/Linux操作系统的全新桌面环境。Raspbian系统此前搭载很高知名度的轻量级LXDE桌面环境,但该桌面环境并非针对树莓派设备而是面向诸多Linux发行版本。为此树莓派基金会在几年前招募了Simon Long,致力于为用户打造更适用的桌面环境。

eb16541d37774cc.jpg_600x600.jpg

经过长达2年的研发和测试,在他的带领下构建了树莓派设备主打系统–Raspbian系统的全新完整桌面环境并通过树莓派基金会发行。新桌面环境称之为PIXEL,全新的Raspbian桌面环境提供了更为养眼的界面设计、全新的图标、全新的应用菜单和全新的主题。

令人感到遗憾的是,PIXEL桌面环境并不默认搭载Epiphany网页浏览器,而是替换使用Chromium。如果你是树莓派用户且并不是十分喜欢LXDE桌面环境,那么你现在可以免费下载PIXEL桌面。现有用户可以通过以下命令进行安装

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install -y rpi-chromium-mods
sudo apt-get install -y python-sense-emu python3-sense-emu
sudo apt-get install -y python-sense-emu-doc realvnc-vnc-viewer

 

C# Excel合并单元格,并赋值 - 一米阳光的专栏 - 博客频道 - CSDN.NET

mikel阅读(2749)

 

来源: 合并单元格,并赋值 – 一米阳光的专栏 – 博客频道 – CSDN.NET

/// 合并单元格,并赋值,对每个WorkSheet操作
///

///开始行索引 ///开始列索引 ///结束行索引 ///结束列索引 ///合并后Range的值 public void MergeCells(int beginRowIndex,int beginColumnIndex,int endRowIndex,int endColumnIndex,string text)
{
for(int i=1;i<=this.WorkSheetCount;i++)
{
workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
range = workSheet.get_Range(workSheet.Cells[beginRowIndex,beginColumnIndex],workSheet.Cells[endRowIndex,endColumnIndex]);

range.ClearContents(); //先把Range内容清除,合并才不会出错
range.MergeCells = true;
range.Value = text;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
}
}

///

/// 合并单元格,并赋值,对指定WorkSheet操作
///

///WorkSheet索引 ///开始行索引 ///开始列索引 ///结束行索引 ///结束列索引 ///合并后Range的值 public void MergeCells(int sheetIndex,int beginRowIndex,int beginColumnIndex,int endRowIndex,int endColumnIndex,string text)
{
if(sheetIndex > this.WorkSheetCount)
{
this.KillExcelProcess();
throw new Exception("索引超出范围,WorkSheet索引不能大于WorkSheet数量!");
}

workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(sheetIndex);
range = workSheet.get_Range(workSheet.Cells[beginRowIndex,beginColumnIndex],workSheet.Cells[endRowIndex,endColumnIndex]);

range.ClearContents(); //先把Range内容清除,合并才不会出错
range.MergeCells = true;
range.Value = text;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
}

C#DataTable导出Excel,并实现合并单元格 - 雄风哥 - 博客园

mikel阅读(2832)

来源: C#DataTable导出Excel,并实现合并单元格 – 雄风哥 – 博客园

ASP.NET webwofrm后台代码———-建议Framework4.0及以上,3.5试过出现好多莫名错误…

首先导入两个程序集。我的是 office2003,引用的COM里面的 Microsoft.office.Interop.Excel 14.0   和 程序集里的Microsoft Excel 12.0 Object Library。有多个版本,根据自己的office版本选择。

添加之后引用里力会出现两个DLL Microsoft.office.Core 和Microsoft.office.Interop.Excel

生成一下项目,如果出现  Excel.ApplicationClass()无法互嵌套操作类型 请改用适用的接口 

把引用的Microsoft.Office.Interop.Excel 右击属性 嵌入互操作类型改为false即可

DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn();
dc1.ColumnName = "name";
dc1.DataType = typeof(string);
DataColumn dc2 = new DataColumn();
dc2.ColumnName = "age";
dc2.DataType = typeof(int);
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
for (int i = 0; i < 1000; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "茂茂" + i + "号";
dr[1] = i;
dt.Rows.Add(dr);
}
new Class1().DataTabletoExcel(dt, DateTime.Now.Ticks+".xlsx");

先造些数据,然后将datatable和要导出文件名传递给方法。

DataTabletoExcel 方法体,一般的DataTable可以直接导出。比较复杂的结构需要自己定义

/// ///不要图省劲省略了System.Data。Microsoft.office.Interop.DataTable 和System.Data.DataTable 会产生歧义
public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName)
{

///先得到datatable的行数
int rowNum = tmpDataTable.Rows.Count;
///列数
int columnNum = tmpDataTable.Columns.Count;
///声明一个应用程序类实例
Application xlApp = new ApplicationClass();

//xlApp.DefaultFilePath = ""; ///默认文件路径,将其设置路径后发现没什么变化。导出excel的路径还是在参数strFileName里设置
//xlApp.DisplayAlerts = true;
//xlApp.SheetsInNewWorkbook = 1;///返回或设置 Microsoft Excel 自动插入到新工作簿中的工作表数目。Long 类型,可读写。设置为2之后没发现什么区别
//创建一个新工作簿
Workbook xlBook = xlApp.Workbooks.Add();
///在工作簿中得到sheet。
_Worksheet oSheet = (_Worksheet)xlBook.Worksheets[1];
#region 绘制列
///自定义方法,想sheet中绘制列
RangeBuild(oSheet, "A1", "A2", "编号");
RangeBuild(oSheet, "B1", "B2", "畜主");
RangeBuild(oSheet, "C1", "C2", "地址");
RangeBuild(oSheet, "D1", "D2", "区划");
RangeBuild(oSheet, "E1", "E2", "规模");
RangeBuild(oSheet, "F1", "H1", "总存栏量");
RangeBuild(oSheet, "F2", "F2", "期初");
RangeBuild(oSheet, "G2", "G2", "期末");
RangeBuild(oSheet, "H2", "H2", "变更");
RangeBuild(oSheet, "I1", "K1", "母猪");
RangeBuild(oSheet, "I2", "I2", "期初");
RangeBuild(oSheet, "J2", "J2", "期末");
RangeBuild(oSheet, "K2", "K2", "变更");
RangeBuild(oSheet, "L1", "N1", "肉猪");
RangeBuild(oSheet, "L2", "L2", "期初");
RangeBuild(oSheet, "M2", "M2", "期末");
RangeBuild(oSheet, "N2", "N2", "变更");
RangeBuild(oSheet, "O1", "Q1", "仔猪");
RangeBuild(oSheet, "O2", "O2", "期初");
RangeBuild(oSheet, "P2", "P2", "期末");
RangeBuild(oSheet, "Q2", "Q2", "变更");
RangeBuild(oSheet, "R1", "T1", "公猪");
RangeBuild(oSheet, "R2", "R2", "期初");
RangeBuild(oSheet, "S2", "S2", "期末");
RangeBuild(oSheet, "T2", "T2", "变更");
RangeBuild(oSheet, "U1", "W1", "总面积");
RangeBuild(oSheet, "U2", "U2", "期初");
RangeBuild(oSheet, "V2", "V2", "期末");
RangeBuild(oSheet, "W2", "W2", "变更");
RangeBuild(oSheet, "X1", "Z1", "批建");
RangeBuild(oSheet, "X2", "X2", "期初");
RangeBuild(oSheet, "Y2", "Y2", "期末");
RangeBuild(oSheet, "Z2", "Z2", "变更");
RangeBuild(oSheet, "AA1", "AC1", "未批建");
RangeBuild(oSheet, "AA2", "AA2", "期初");
RangeBuild(oSheet, "AB2", "AB2", "期末");
RangeBuild(oSheet, "AC2", "AC2", "变更");
#endregion
//将DataTable中的数据导入Excel中
for (int i = 0; i < rowNum; i++)
{

for (int j = 0; j < columnNum; j++)
{
///excel中的列是从1开始的
xlApp.Cells[i+2, j+1] = tmpDataTable.Rows[i][j].ToString();
}
}
///保存,路径一块穿进去。否则回到一个很奇妙的地方,貌似是system32里 temp下....
oSheet.SaveAs(@"D:\a\" + strFileName);
}

private static void RangeBuild(_Worksheet oSheet,string startcell,string endcell,string value)
{
///创建一个区域对象。第一个参数是开始格子号,第二个参数是终止格子号。比如选中A1——D3这个区域。
Range range = (Range)oSheet.get_Range(startcell, endcell);
///合并方法,0的时候直接合并为一个单元格
range.Merge(0);
///合并单元格之后,设置其中的文本
range.Value = value;
//横向居中
range.HorizontalAlignment = XlVAlign.xlVAlignCenter;
///字体大小
range.Font.Size = 18;
///字体
range.Font.Name = "黑体";
///行高
range.RowHeight = 24;
//自动调整列宽
range.EntireColumn.AutoFit();
//填充颜色
range.Interior.ColorIndex = 20;
//设置单元格边框的粗细
range.Cells.Borders.LineStyle = 1;
}

我这样导出的excel是这样子的

在raspberry pi(树莓派)上连接VPN - tndroid的专栏 - 博客频道 - CSDN.NET

mikel阅读(3335)

先安装客户端sudo apt-get install pptp-linux然后切换到root下,建立一个配置文件root@raspberrypi:~# cd /etc/ppp/peersroot@raspberrypi:/etc/ppp/peers# vi

来源: 在raspberry pi(树莓派)上连接VPN – tndroid的专栏 – 博客频道 – CSDN.NET

先安装客户端

sudo apt-get install pptp-linux

然后切换到root下,建立一个配置文件

root@raspberrypi:~# cd /etc/ppp/peers
root@raspberrypi:/etc/ppp/peers# vi vpn

内容如下:

pty "pptp XXX.XXX.XXX.XXX --nolaunchpppd"
name 用户名
password 密码
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
persist
maxfail 0
defaultroute
replacedefaultroute
usepeerdns

连接/断开vpn:

pon /etc/ppp/peers/vpn
poff /etc/ppp/peers/vpn

(原创)解决Excel 互操作错误"检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005" - goyier - 博客园

mikel阅读(985)

来源: (原创)解决Excel 互操作错误”检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005″ – goyier – 博客园

最近在.net中处理Excel文件数据导入时报出以下错误:

检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005,如图所示:

可以看到报出的异常类型为:UnauthorizedAccessException,没有权限访问,表明我们需要配置执行操作账户的COM访问权限.

由于系统是Windows Server 2008 64位版的,服务器上安装的Excel版本为Excel 2007 是32位应用程序,所以在系统的组件服务中是找不到Excel的,

此时,需要在32位DCOM配置中设置权限,具体步骤如下:

1.运行命令”comexp.msc -32″,打开组件服务32位管理控制台,如图:

2.在DCOM配置中找到”Microsoft Excel Applcation”,如图:

3.右键->属性,在标识选项卡中选择”交互式用户”,如图:

4.在”安全”选项卡中的”启动和激活权限”分组中,选择”自定义”,然后点击”编辑”,添加执行操作的账户并授予”本地启动”和”本地激活”权限,如图所示

5..在”安全”选项卡中的”访问权限”分组中,选择”自定义”,然后点击”编辑”,添加执行操作的账户并授予”本地访问”权限,如图所示

6.配置结束,重新运行程序,不再报错.

 

windows 安装ionic和cordova - pcaxb的专栏 - 博客频道 - CSDN.NET

mikel阅读(834)

 

来源: win 安装ionic和cordova – pcaxb的专栏 – 博客频道 – CSDN.NET

nodejs下载:下载第一个长期支持的版本,稳定可靠
中文网:http://nodejs.cn/
英文网:https://nodejs.org/en/

安装git,双击git bash打开,用命令安装ionic和cordova

使用淘宝的镜像文件安装,不需要翻墙,直接安装
npm config set registry https://registry.npm.taobao.org

npm install -g ionic

或者
npm –registry https://registry.npm.taobao.org info underscore install -g ionic

如果是安装cordova把上面的ionic改成cordova就可以了,如果    要装某个版本的,就用cordova@4.2.0这样的形式

解决 无法将类型为“Excel._Application的QueryInterface”的 COM 对象强制转换为接口类型 - 难求 专栏 - 博客频道 - CSDN.NET

mikel阅读(1846)

ASP.NET中用C#调用EXCEL进行导出时,有时会出现接口Excel._Application的QueryInterface失败的提示。这通常是office组件安装注册的问题,而非程序本身

来源: 解决 无法将类型为“Excel._Application的QueryInterface”的 COM 对象强制转换为接口类型 – 难求 专栏 – 博客频道 – CSDN.NET

ASP.NET中用C#调用EXCEL进行导出时,有时会出现接口Excel._Application的QueryInterface失败的提示。

无法将类型为 Microsoft.Office.Interop.Excel.ApplicationClass的错误也同样可以

这通常是office组件安装注册的问题,而非程序本身

中英文截图

用这种方式没有用

解决办法

要将office组件的重新注册

点击【开始】→【运行】

找到EXCEL程序的安装目录,将Excel程序托到运行框中

如图,然后在后面 输入 /regserver  确定 就ok了

“D:\Microsoft Office 2003\OFFICE11\EXCEL.EXE”  /regserver

c#中转出Excel时碰到Excel的COM组件没有注册的问题解决方法

mikel阅读(2312)

Office 组件 注册 手工注册

1、如何生成Interop.Excel.dll?

进入你的visual studio的sdk下的bin目录,找到TlbImp.exe文件(实际上可能不在这里,所以可以打开VS的控制台,输入tlbimp看下),如果没有,请用光盘安装此文件,TLBIMP的使用说明MSDN:http://msdn.microsoft.com/zh-cn/library/tt0cf3sx(v=vs.80).aspx
命令行(cmd)进入bin目录,运行TlbImp /out:Interop.Excel.dll  Excel.exe所在完整路径

此时很可能会报错:TlbImp   error:   Unable   to   locate   input   type   library:   ‘c:\program files\mcrosoft offi
ce\office\EXCEL.EXE’
此问题很有可能是TlbImp的bug,不支持空格式的路径;(具体原因不明)不要紧,将Excel.exe拷贝入bin目录,直接运行TlbImp /out:Interop.Excel.dll Excel.exe,提示“Type library imported to Interop.Excel.dll路径”

在bin目录下找到Interop.Excel.dll文件。在你的visual studio里将其引用即可。

可以查看下我的命令E:\func_core7_branch\Coding\product\win32\office6是wps所在的目录

2、如果是excel2000或excel2002怎么办?

如果是Excel2000,则将Excel.exe改成Excel9.olb
Excel2002同2003

3、各种版本的引用组件参数如下:

文件/版本Interop.Excel.dllInterop.Office.dllInterop.VBIDE.dll添加引用\COM组件2000V1.3.0.0V2.1.0.0V5.3.0.0Microsoft Excel 9.0 Object Library(EXCEL9.OLB)2002(xp)V1.4.0.0V2.2.0.0V5.3.0.0Microsoft Excel 10.0 Object Library(Excel.EXE文件)2003V1.5.0.0V2.3.0.0V5.3.0.0Microsoft Excel 11.0 Object Library(Excel.EXE文件)

(另外一种既不需要客户端安装excel也不需要安装Microsoft.Jet.OLEDB.4.0的方法: http://www.codeproject.com/KB/office/ExcelReader.aspx)

4、困扰我已久的问题:程序智能切换 不同版本(即可以动态调用不同版本)

以ET(即WPS 表格)来举例,Microsoft Office同理

前提是已安装wps环境。C#中如果想要调用不同版本的ET(Excel),则把指向的路径更改就行了

注册表中定位到如下项目HKEY_CLASSES_ROOT\CLSID\{45540001-5750-5300-4B49-4E47534F4654}

更改子项LocalServer32中名称为”(默认)”的值比如:E:\func_core7_branch\Coding\product\win32\office6\et.exe /Automation

其中E:\func_core7_branch\Coding\product\win32\office6\et.exe就是你程序要调用的ET的版本。

说明:ET的CLSID可能会不一样,可能不是{45540001-5750-5300-4B49-4E47534F4654} 。只需要

在控制面板\系统和安全\管理工具\组建服务\计算机\我的电脑\DCOM配置找到Kingsoft Spreadsheets Application Class

查看详细信息可看到CLSID。附上我注册ET的代码

Win7 64位安装Python PIL库 - 琼台博客

mikel阅读(1543)

今天上传图片,一直提示The _imaging C module is not installed,原来是Win7 64位安装32位的PIL库导致,下载本站的64位PIL库安装即可解决Win7 64位安装PIL库问题。

来源: Win7 64位安装Python PIL库 – 琼台博客

今天上传图片,一直提示The _imaging C module is not installed

PIL模块我之前早就安装过了,为什么提示__imaging模块没有安装呢?到python下能找到__imaging.pyd文件,说明已经安装过了。重装一次PIL库结果还是一样!

为了验证我随便写一个Python程序,import __imaging运行提示PIL ImportError: DLL load failed: %1 不是有效的 Win32 应用程序

闹了半天,原来是我系统是Win7 64位的,而安装的PIL库是32位的,结果才导致64位的加载不了32位的程序。到官网去找找也没有发现64位exe程序。经过一番搜索,找到了一个64位的PIL库,可以解决WIN7 64位的问题,直接下载安装就好。

这里我提供下载地址,需要的朋友直接下载就好

PIL-fork-1.1.7.win-amd64-py2.7.exe