VC 设置EXCEL单元格的格式
来源:互联网 发布:java培训 编辑:程序博客网 时间:2024/06/05 19:45
示例---将所有单元格设置为文本格式:
- _Application app; //Excel应用程序接口
- Workbooks books; //工作薄集合
- _Workbook book; //工作薄
- Worksheets sheets; //工作表集合
- _Worksheet sheet; //工作表
- Range range; //Excel中针对单元格的操作都应先获取其对应的Range对象
- Font font;
- Range cols;
- /*
- COleVariant类为VARIANT数据类型的包装,在自动化程序中,通常都使用
- VARIANT数据类型进行参数传递。故下列程序中,函数参数都是通过COleVariant
- 类来转换了的。
- */
- //covOptional 可选参数的VARIANT类型
- COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- if( !app.CreateDispatch(L"Excel.Application") ){
- this->MessageBox(L"无法创建Excel应用!");
- return;
- }
- //获取工作薄集合
- books=app.GetWorkbooks();
- //添加一个工作薄
- book=books.Add(covOptional);
- //获取工作表集合
- sheets=book.GetSheets();
- //获取第一个工作表
- sheet=sheets.GetItem(COleVariant((short)1));
- range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
- range.SetNumberFormat(COleVariant(L"@")); //将单元格设置为文本类型
- //合并单元格
- //加载要合并的单元格
- range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))),TRUE);
- range.Merge(COleVariant((long)0));
- range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
- range.SetItem(COleVariant((long)1),COleVariant((long)1),COleVariant(_T("数学系研究生课程统计"))); //A1
- range.SetItem(COleVariant((long)2),COleVariant((long)1),COleVariant(_T("课程名"))); //A2
- range.SetItem(COleVariant((long)2),COleVariant((long)2),COleVariant(_T("课时"))); //B2
函数 SetNumberFormat() 用于设置单元格的格式,但是首先我们必须知道所有格式的标记。
文本类:
1、@ 指定内容按文本显示,主要用于编码、手机号等用数字表示的文本。设定该格式后,可以保证导出excel时,此类文本不会被转成数字显示。
数值类:
1、 0.00 表示两位小数,例如3.10367显示为3.10
2、 0.## 表示两位小数,当小数末位为0时,0将不显示。例如3.10显示为3.1
3、 "#,##0.00 "表示两位小数,且显示千份位
4、 #,##0.00;[Red]#,##0.00 表示负数红字
5、0.00;[Red]0.00;" " 表示负数红字,且数据为0时不显示
6、0.00;[Red](0.00);" "表示正数时两位小数,负数时两位小数并显示红色,0时不显示。0.00;[Red](0.00)只是一个示例,可以为任意的数字格式串,后边再加上;" "(空格)即表示数据为0时不显示。
日期类:
1、 yyyy-m-d
2、 yyyy-MM-dd
3、 yyyy-MM-dd hh:mm:ss
4、 yyyy年MM月dd日
百分比:
1、0%
2、0.00%
详细请打开Excel2003,单元格右键,设置单元格格式,选一种格式,点自定义即可看到该格式的格式串;有的Excel格式串后有带”_”,在使用时,必须去掉。
读取xls文件示例 :
//变量定义
_Application app; //Excel应用程序接口
Workbooks books; //工作薄集合
_Workbook book; //工作薄
Worksheets sheets; //工作表集合
_Worksheet sheet; //工作表
Range range; //Excel中针对单元格的操作都应先获取其对应的Range对象
Font font;
Range cols;
Range iCell;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//初始化
if( !app.CreateDispatch(L"Excel.Application") ){
this->MessageBox(L"无法创建Excel应用!");
return;
}
app.SetVisible(TRUE); //可见
app.SetUserControl(TRUE); //用户可控制
//打开XLS文件
books.AttachDispatch(app.GetWorkbooks());
lpDisp = books.Open(L"d:\\3.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
//得到Workbook
book.AttachDispatch(lpDisp);
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets());
//得到当前活跃sheet
//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
lpDisp=book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//*****
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
Range usedRange;
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
long iRowNum=range.GetCount(); //已经使用的行数
range.AttachDispatch(usedRange.GetColumns());
long iColNum=range.GetCount(); //已经使用的列数
long iStartRow=usedRange.GetRow(); //已使用区域的起始行,从开始
long iStartCol=usedRange.GetColumn(); //已使用区域的起始列,从开始
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult =range.GetValue();
CString str;
if(vResult.vt == VT_BSTR) //字符串
{
str=vResult.bstrVal;
}
else if (vResult.vt==VT_R8) //8字节的数字
{
str.Format(L"%f",vResult.dblVal);
}
else if(vResult.vt==VT_DATE) //时间格式
{
SYSTEMTIME st;
VariantTimeToSystemTime((long)&vResult.date, &st);
}
else if(vResult.vt==VT_EMPTY) //单元格空的
{
str="";
}
//读取第一个单元格的对齐方式,数据类型:VT_I4
//读取水平对齐方式
range.AttachDispatch(sheet.GetCells());
iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetHorizontalAlignment();
if(vResult.lVal!=0)
{
switch (vResult.lVal)
{
case 1: //默认
break;
case -4108: //居中
break;
case -4131 : //*左
break;
case -4152 : //*右
break;
}
}
//垂直对齐方式
iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetVerticalAlignment();
if(vResult.lVal!=0)
{
switch (vResult.lVal)
{
case -4160 : //*上
break;
case -4108 : //居中
break;
case -4107 : //*下
break;
}
}
//设置第一个单元格字体颜色:红色
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
font.AttachDispatch(range.GetFont());
font.SetColor(COleVariant((long)0xFF0000));
//合并单元格的处理
//包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并
Range unionRange;
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult=unionRange.GetMergeCells();
if(vResult.boolVal==-1) //是合并的单元格
{
//合并单元格的行数
range.AttachDispatch (unionRange.GetRows ());
long iUnionRowNum=range.GetCount ();
//合并单元格的列数
range.AttachDispatch (unionRange.GetColumns ());
long iUnionColumnNum=range.GetCount ();
//合并区域的起始行,列
long iUnionStartRow=unionRange.GetRow(); //起始行,从开始
long iUnionStartCol=unionRange.GetColumn(); //起始列,从开始
}
else if(vResult.boolVal==0)
{
//不是合并的单元格
}
//将第一个单元格合并成行,列
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); //第一个单元格
unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)3),COleVariant((long)2))); //GetResize(3,2) 从第一个单元格开始合并行列的所有单元格
unionRange.Merge(COleVariant((long)0)); //合并单元格
//将文件保存为.xls
book.SaveAs(COleVariant(L"C:\\2.xls"),covOptional,covOptional,
covOptional,covOptional,covOptional,0,
covOptional,covOptional,covOptional,covOptional);
book.Close (covOptional,COleVariant(L"d:\\3.xls"),covOptional);
books.Close();
//释放对象(相当重要!)
range.ReleaseDispatch();
cols.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
//App一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
app.ReleaseDispatch();
app.Quit();
选择篇
1 选择单元格
//选择一个单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1"))),TRUE);
//选择多个单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))),TRUE);
//使用变量表示单元格
CString CellName;
Int i=1;j=1;
CellName.Format(_T(“%c%d”),j+64,i); //A–Z 65-90
//加载单元格
rnge.AttachDispatch(range.GetRange(COleVariant(CellName),COleVariant(CellName)));
2 选择某行
1)
//选择第一行
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("IV1"))),TRUE);
//选择前5行
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("IV5"))),TRUE);
2)先选择某行中的某个单元格,然后再选择整行
Range rows;
rows.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1"))),TRUE);
rows=rows.GetEntireRow();
3)获得所有的行,然后再选择指定行
Range rows;
range.AttachDispatch(sheet.GetRows(),TRUE);
//选择第一行
rows.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal);
rows.SetRowHeight(COleVariant((long)60));
3 选择某一列
1)
range.AttachDispatch(sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A65536"))); //第一列
2)先选择某列中的某个单元格,然后再选择整列
range.AttachDispatch(sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A1"))); //第一列
range=range.GetEntireColumn();
3)先获得所有列,然后再选择某一列
//获得所有列
range.AttachDispatch(sheet.GetColumns(),true);
//选择第一列
range.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
4 选择全部CELLS
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
5 选择已使用的单元格
range.AttachDispatch(sheet.GetUsedRange());//加载已使用的单元格
6 获取单元格的值
1)
range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
COleVariant rValue;
rValue=COleVariant(range.GetValue());
rValue.ChangeType(VT_BSTR);
this->MessageBox(CString(rValue.bstrVal));
2)
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult =range.GetValue();
CString str;
if(vResult.vt == VT_BSTR) //字符串
{
str=vResult.bstrVal;
}
else if (vResult.vt==VT_R8) //8字节的数字
{
str.Format(L"%f",vResult.dblVal);
}
else if(vResult.vt==VT_DATE) //时间格式
{
SYSTEMTIME st;
VariantTimeToSystemTime((long)&vResult.date, &st);
}
else if(vResult.vt==VT_EMPTY) //单元格空的
{
str="";
}
选择篇
1 选择单元格
//选择一个单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1"))),TRUE);
//选择多个单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))),TRUE);
//使用变量表示单元格
CString CellName;
Int i=1;j=1;
CellName.Format(_T(“%c%d”),j+64,i); //A–Z 65-90
//加载单元格
rnge.AttachDispatch(range.GetRange(COleVariant(CellName),COleVariant(CellName)));
2 选择某行
1)
//选择第一行
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("IV1"))),TRUE);
//选择前5行
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("IV5"))),TRUE);
2)先选择某行中的某个单元格,然后再选择整行
Range rows;
rows.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1"))),TRUE);
rows=rows.GetEntireRow();
3)获得所有的行,然后再选择指定行
Range rows;
range.AttachDispatch(sheet.GetRows(),TRUE);
//选择第一行
rows.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal);
rows.SetRowHeight(COleVariant((long)60));
3 选择某一列
1)
range.AttachDispatch(sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A65536"))); //第一列
2)先选择某列中的某个单元格,然后再选择整列
range.AttachDispatch(sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A1"))); //第一列
range=range.GetEntireColumn();
3)先获得所有列,然后再选择某一列
//获得所有列
range.AttachDispatch(sheet.GetColumns(),true);
//选择第一列
range.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
4 选择全部CELLS
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
5 选择已使用的单元格
range.AttachDispatch(sheet.GetUsedRange());//加载已使用的单元格
6 获取单元格的值
1)
range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
COleVariant rValue;
rValue=COleVariant(range.GetValue());
rValue.ChangeType(VT_BSTR);
this->MessageBox(CString(rValue.bstrVal));
2)
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult =range.GetValue();
CString str;
if(vResult.vt == VT_BSTR) //字符串
{
str=vResult.bstrVal;
}
else if (vResult.vt==VT_R8) //8字节的数字
{
str.Format(L"%f",vResult.dblVal);
}
else if(vResult.vt==VT_DATE) //时间格式
{
SYSTEMTIME st;
VariantTimeToSystemTime((long)&vResult.date, &st);
}
else if(vResult.vt==VT_EMPTY) //单元格空的
{
str="";
}
设置篇
1 设置单元格的值
1)
选中指定单元格,使用SetValue设置值
CellName.Format(_T("A%d"),i);//单元格的名称
range.AttachDispatch(sheet.GetRange(COleVariant(CellName),COleVariant(CellName)));//加载单元格range.SetValue(COleVariant(subFileName));
CellName.Format(_T("C%d"),i);//单元格的名称
range.AttachDispatch(sheet.GetRange(COleVariant(CellName),COleVariant(CellName)));//加载单元格
range.SetValue(COleVariant((long)i));
2)
选中所有的单元格, 使用SetItem 设置指定单元格的值
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
//设置第I行 第1、2、3列的值
range.SetItem(COleVariant((long)(i)),COleVariant((long)1),COleVariant(subFileName)); //第一列
range.SetItem(COleVariant((long)(i)),COleVariant((long)2),COleVariant(unicodeStr)); //第二列
range.SetItem(COleVariant((long)(i)),COleVariant((long)3),COleVariant((long)i)); //第三列
2 设置行高列宽
选中某列 设置列宽
//获得所有列
range.AttachDispatch(sheet.GetColumns(),true);
//设置第一列的列宽 Range cols
cols.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
cols.SetColumnWidth(COleVariant((long)10)); //设置列宽
//设置第4列的列宽
cols.AttachDispatch(range.GetItem(COleVariant((long)4),vtMissing).pdispVal,TRUE);
cols.SetColumnWidth(COleVariant((long)10)); //设置列宽
//设置列宽为自动适应
cols.AutoFit();
设置行高
Range rows;
range.AttachDispatch(sheet.GetRows(),TRUE);
//选择第一行
rows.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal);
//设置行高
rows.SetRowHeight(COleVariant((long)60));
注意: 行高列宽使用的单位不一样
3 设置单元格类型
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
range.SetNumberFormat(COleVariant(L"@")); //将单元格设置为文本类型
4 设置单元格字体
Font ft;
//设置第一列的字体
range.AttachDispatch(sheet.GetColumns(),true);
range.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
//字体作用范围
ft.AttachDispatch(range.GetFont());
ft.SetName(COleVariant(_T("宋体")));
ft.SetSize(COleVariant((long)48));
ft.SetBold(COleVariant((long)1));//粗体
ft.SetColorIndex(COleVariant((long)2));//设置字体颜色
5 设置单元格背景色
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))));
//////////////设置底色/////////////////
Interior it;
it.AttachDispatch(range.GetInterior());
it.SetColorIndex(COleVariant((long)11));//标题底色
////表格内容的底色////
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("D5"))));
it.AttachDispatch(range.GetInterior());
it.SetColorIndex(COleVariant((long)15));
6 设置表格边框
1)
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("D5"))));
//LineStyle=线型Weight=线宽ColorIndex=线的颜色(-4105为自动)
range.BorderAround(COleVariant((long)1),(long)2,((long)-4105),vtMissing);//设置边框
2)
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("D5"))));
_variant_t v1; //线型
_variant_t v2; //宽度
_variant_t v3; //颜色
v1.vt=VT_I2;
v1.lVal=2; // 线的样式:- no line; 1-solid; 2-big dot;3-small dot;4-dash dot; 5-dash dot dot;
v2.vt=v1.vt;
v2.lVal=3; // 线的粗细程度
v3.vt=v1.vt;
v3.lVal=1; // 1-black;2-white;3-red;4-green;5-blue; 6-yellow; 7-pink;8-dark blue;
UnitRge.BorderAround(v1,v2,v3,vtMissing);//设置边框
7 合并单元格
1)
//合并单元格
//加载要合并的单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))),TRUE);
range.Merge(COleVariant((long)0));
2)
//将第一个单元格合并成行,列
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); //第一个单元格
unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)3),COleVariant((long)2))); //GetResize(3,2) 从第一个单元格开始合并行列的所有单元格
unionRange.Merge(COleVariant((long)0)); //合并单元格
8 设置单元格文本为自动换行 及排列方式
range.AttachDispatch(sheet.GetUsedRange());//加载已使用的单元格
range.SetWrapText(COleVariant((long)1));//设置单元格内的文本为自动换行
//设置齐方式为水平垂直居中
//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
range.SetHorizontalAlignment(COleVariant((long)-4108));
range.SetVerticalAlignment(COleVariant((long)-4108));
9 在单元格中插入公式
//选择A2单元格,插入一个公式"=RAND()*100000",并设置A2数字格式为货币形式
range=sheet.GetRange(COleVariant(L"A2"),COleVariant(L"A2"));
range.SetFormula(COleVariant(L"=RAND()*100000"));
range.SetNumberFormat(COleVariant(L"$0.00"));
10 在单元格中插入图片
Shapes shapes = sheet.GetShapes();// 从Sheet对象上获得一个Shapes
range.AttachDispatch(sheet.GetRange(COleVariant(L"E5"),COleVariant(L"E5"))); // 获得Range对象,用来插入图片
shapes.AddPicture( L"d:\\pic.bmp " , false , true , (float)range.GetLeft().dblVal
,(float)range.GetTop().dblVal,(float)range.GetWidth().dblVal,(float)range.GetHeight().dblVal);
ShapeRange sRange = shapes.GetRange(_variant_t(long(1)));
sRange.SetHeight(float(30)); //在RANGE范围内 设置图片宽高
sRange.SetWidth(float(30));
11 对选取的区域进行排序
#define xlAscending (long) 1
#define xlDescending (long) 2
#define vOpt COleVariant((long) DISP_E_PARAMNOTFOUND, VT_ERROR)
#define xlHeader (long) 1 // 选取的区域有标题
#define xlNoHeader (long) 2 // 选取的区域无标题 一定要正确确定是否有标题,否则排序可能不成功
#define xlMatchCase COleVariant((long) 1)
#define xlIgnoreCase COleVariant((long) 0)
#define xlTopToBottom (long) 1 // 垂直方向进行排序
#define xlLeftToRight (long) 2 // 水平方向进行排序
#define xlPinYin (long) 1 // this is the default // 按字符的中文拼音进行排序
#define xlStroke (long) 2 // 按每个字符中的笔画数进行排序
VARIANT key1; // these lines set up first arg (key1) to sort
V_VT(&key1) = VT_DISPATCH; // 排序时,关键字的vt设置为VT_DISPATCH
V_DISPATCH(&key1) = sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A1")); // 设置按哪个关键字进行排序 选择单元意为:按此列(或行)为主关键字进行排序
range=sheet.GetRange(COleVariant(L"A1"),COleVariant(CellName)); // 选择对哪些区域内的单元格进行排序
range.Sort(key1, xlAscending, vOpt, vOpt, xlAscending, vOpt,xlAscending,xlNoHeader,vOpt,xlIgnoreCase,xlTopToBottom,xlPinYin); //设置排序 无标题时一定要设置为xlNoHeader 否则不起作用
选择篇
1 选择单元格
//选择一个单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1"))),TRUE);
//选择多个单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))),TRUE);
//使用变量表示单元格
CString CellName;
Int i=1;j=1;
CellName.Format(_T(“%c%d”),j+64,i); //A–Z 65-90
//加载单元格
rnge.AttachDispatch(range.GetRange(COleVariant(CellName),COleVariant(CellName)));
2 选择某行
1)
//选择第一行
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("IV1"))),TRUE);
//选择前5行
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("IV5"))),TRUE);
2)先选择某行中的某个单元格,然后再选择整行
Range rows;
rows.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1"))),TRUE);
rows=rows.GetEntireRow();
3)获得所有的行,然后再选择指定行
Range rows;
range.AttachDispatch(sheet.GetRows(),TRUE);
//选择第一行
rows.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal);
rows.SetRowHeight(COleVariant((long)60));
3 选择某一列
1)
range.AttachDispatch(sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A65536"))); //第一列
2)先选择某列中的某个单元格,然后再选择整列
range.AttachDispatch(sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A1"))); //第一列
range=range.GetEntireColumn();
3)先获得所有列,然后再选择某一列
//获得所有列
range.AttachDispatch(sheet.GetColumns(),true);
//选择第一列
range.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
4 选择全部CELLS
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
5 选择已使用的单元格
range.AttachDispatch(sheet.GetUsedRange());//加载已使用的单元格
6 获取单元格的值
1)
range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
COleVariant rValue;
rValue=COleVariant(range.GetValue());
rValue.ChangeType(VT_BSTR);
this->MessageBox(CString(rValue.bstrVal));
2)
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult =range.GetValue();
CString str;
if(vResult.vt == VT_BSTR) //字符串
{
str=vResult.bstrVal;
}
else if (vResult.vt==VT_R8) //8字节的数字
{
str.Format(L"%f",vResult.dblVal);
}
else if(vResult.vt==VT_DATE) //时间格式
{
SYSTEMTIME st;
VariantTimeToSystemTime((long)&vResult.date, &st);
}
else if(vResult.vt==VT_EMPTY) //单元格空的
{
str="";
}
设置篇
1 设置单元格的值
1)
选中指定单元格,使用SetValue设置值
CellName.Format(_T("A%d"),i);//单元格的名称
range.AttachDispatch(sheet.GetRange(COleVariant(CellName),COleVariant(CellName)));//加载单元格range.SetValue(COleVariant(subFileName));
CellName.Format(_T("C%d"),i);//单元格的名称
range.AttachDispatch(sheet.GetRange(COleVariant(CellName),COleVariant(CellName)));//加载单元格
range.SetValue(COleVariant((long)i));
2)
选中所有的单元格, 使用SetItem 设置指定单元格的值
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
//设置第I行 第1、2、3列的值
range.SetItem(COleVariant((long)(i)),COleVariant((long)1),COleVariant(subFileName)); //第一列
range.SetItem(COleVariant((long)(i)),COleVariant((long)2),COleVariant(unicodeStr)); //第二列
range.SetItem(COleVariant((long)(i)),COleVariant((long)3),COleVariant((long)i)); //第三列
2 设置行高列宽
选中某列 设置列宽
//获得所有列
range.AttachDispatch(sheet.GetColumns(),true);
//设置第一列的列宽 Range cols
cols.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
cols.SetColumnWidth(COleVariant((long)10)); //设置列宽
//设置第4列的列宽
cols.AttachDispatch(range.GetItem(COleVariant((long)4),vtMissing).pdispVal,TRUE);
cols.SetColumnWidth(COleVariant((long)10)); //设置列宽
//设置列宽为自动适应
cols.AutoFit();
设置行高
Range rows;
range.AttachDispatch(sheet.GetRows(),TRUE);
//选择第一行
rows.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal);
//设置行高
rows.SetRowHeight(COleVariant((long)60));
注意: 行高列宽使用的单位不一样
3 设置单元格类型
range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格
range.SetNumberFormat(COleVariant(L"@")); //将单元格设置为文本类型
4 设置单元格字体
Font ft;
//设置第一列的字体
range.AttachDispatch(sheet.GetColumns(),true);
range.AttachDispatch(range.GetItem(COleVariant((long)1),vtMissing).pdispVal,TRUE);
//字体作用范围
ft.AttachDispatch(range.GetFont());
ft.SetName(COleVariant(_T("宋体")));
ft.SetSize(COleVariant((long)48));
ft.SetBold(COleVariant((long)1));//粗体
ft.SetColorIndex(COleVariant((long)2));//设置字体颜色
5 设置单元格背景色
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))));
//////////////设置底色/////////////////
Interior it;
it.AttachDispatch(range.GetInterior());
it.SetColorIndex(COleVariant((long)11));//标题底色
////表格内容的底色////
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("D5"))));
it.AttachDispatch(range.GetInterior());
it.SetColorIndex(COleVariant((long)15));
6 设置表格边框
1)
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("D5"))));
//LineStyle=线型Weight=线宽ColorIndex=线的颜色(-4105为自动)
range.BorderAround(COleVariant((long)1),(long)2,((long)-4105),vtMissing);//设置边框
2)
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("D5"))));
_variant_t v1; //线型
_variant_t v2; //宽度
_variant_t v3; //颜色
v1.vt=VT_I2;
v1.lVal=2; // 线的样式:- no line; 1-solid; 2-big dot;3-small dot;4-dash dot; 5-dash dot dot;
v2.vt=v1.vt;
v2.lVal=3; // 线的粗细程度
v3.vt=v1.vt;
v3.lVal=1; // 1-black;2-white;3-red;4-green;5-blue; 6-yellow; 7-pink;8-dark blue;
UnitRge.BorderAround(v1,v2,v3,vtMissing);//设置边框
7 合并单元格
1)
//合并单元格
//加载要合并的单元格
range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))),TRUE);
range.Merge(COleVariant((long)0));
2)
//将第一个单元格合并成行,列
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); //第一个单元格
unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)3),COleVariant((long)2))); //GetResize(3,2) 从第一个单元格开始合并行列的所有单元格
unionRange.Merge(COleVariant((long)0)); //合并单元格
8 设置单元格文本为自动换行 及排列方式
range.AttachDispatch(sheet.GetUsedRange());//加载已使用的单元格
range.SetWrapText(COleVariant((long)1));//设置单元格内的文本为自动换行
//设置齐方式为水平垂直居中
//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
range.SetHorizontalAlignment(COleVariant((long)-4108));
range.SetVerticalAlignment(COleVariant((long)-4108));
9 在单元格中插入公式
//选择A2单元格,插入一个公式"=RAND()*100000",并设置A2数字格式为货币形式
range=sheet.GetRange(COleVariant(L"A2"),COleVariant(L"A2"));
range.SetFormula(COleVariant(L"=RAND()*100000"));
range.SetNumberFormat(COleVariant(L"$0.00"));
10 在单元格中插入图片
Shapes shapes = sheet.GetShapes();// 从Sheet对象上获得一个Shapes
range.AttachDispatch(sheet.GetRange(COleVariant(L"E5"),COleVariant(L"E5"))); // 获得Range对象,用来插入图片
shapes.AddPicture( L"d:\\pic.bmp " , false , true , (float)range.GetLeft().dblVal
,(float)range.GetTop().dblVal,(float)range.GetWidth().dblVal,(float)range.GetHeight().dblVal);
ShapeRange sRange = shapes.GetRange(_variant_t(long(1)));
sRange.SetHeight(float(30)); //在RANGE范围内 设置图片宽高
sRange.SetWidth(float(30));
11 对选取的区域进行排序
#define xlAscending (long) 1
#define xlDescending (long) 2
#define vOpt COleVariant((long) DISP_E_PARAMNOTFOUND, VT_ERROR)
#define xlHeader (long) 1 // 选取的区域有标题
#define xlNoHeader (long) 2 // 选取的区域无标题 一定要正确确定是否有标题,否则排序可能不成功
#define xlMatchCase COleVariant((long) 1)
#define xlIgnoreCase COleVariant((long) 0)
#define xlTopToBottom (long) 1 // 垂直方向进行排序
#define xlLeftToRight (long) 2 // 水平方向进行排序
#define xlPinYin (long) 1 // this is the default // 按字符的中文拼音进行排序
#define xlStroke (long) 2 // 按每个字符中的笔画数进行排序
VARIANT key1; // these lines set up first arg (key1) to sort
V_VT(&key1) = VT_DISPATCH; // 排序时,关键字的vt设置为VT_DISPATCH
V_DISPATCH(&key1) = sheet.GetRange(COleVariant(L"A1"),COleVariant(L"A1")); // 设置按哪个关键字进行排序 选择单元意为:按此列(或行)为主关键字进行排序
range=sheet.GetRange(COleVariant(L"A1"),COleVariant(CellName)); // 选择对哪些区域内的单元格进行排序
range.Sort(key1, xlAscending, vOpt, vOpt, xlAscending, vOpt,xlAscending,xlNoHeader,vOpt,xlIgnoreCase,xlTopToBottom,xlPinYin); //设置排序 无标题时一定要设置为xlNoHeader 否则不起作用
- VC 设置EXCEL单元格的格式
- VC 设置EXCEL单元格的格式
- 2、VC 设置EXCEL单元格的格式
- VC设置EXCEL单元格格式
- Delphi调用Excel设置单元格的格式
- POI设置EXCEL单元格的"条件格式"
- VC下设置Excel单元格的边框
- VC下设置Excel单元格的边框
- VC下设置Excel单元格的边框
- VC 设置 Excel 的单元格格式 数字形式字符串 文本形式
- C#设置Excel单元格格式
- POI设置Excel单元格格式
- C#设置Excel单元格格式
- excel之单元格格式/设置/
- C#设置Excel单元格格式
- POI 设置EXCEL单元格格式
- C#设置Excel单元格格式
- vba excel 单元格格式设置
- Inventor Add-in 菜单不响应
- 打印出所有字体
- 1358 Period hdu kmp的next数组运用
- LINUX CGI编程
- wordpress获取某个栏目链接地址的方法
- VC 设置EXCEL单元格的格式
- CentOs+ngnix访问PHP文件时常出现的问题
- NHibernate学习博客
- Fragment 防止重复加载
- android popwindow类似QQ中控件
- linux free命令中buffer与cache的区别
- Android开发环境搭建 总结
- android 用release key 发布 百度地图
- cocos2dx schedule可延时的for循环 scheduleonce的问题