mfc 访问Excel,该如何解决
mfc 访问Excel
大家好!
怎样通过MFC可以访问Excel,且可对单元格进行设置颜色、宽度 、字体大小、合并单元格等;
有源码的请贴出来,谢谢!
------解决方案--------------------
office 2003
大家好!
怎样通过MFC可以访问Excel,且可对单元格进行设置颜色、宽度 、字体大小、合并单元格等;
有源码的请贴出来,谢谢!
------解决方案--------------------
office 2003
void CTestExcelDlg::OnBnClickedButton1()
{
CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheetData, sheetChart;
CRange range;
CRange unionRange;
CFont0 font;
CInterior Interior;
LPDISPATCH lpDisp;
COleVariant covTrue((short)TRUE), covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CString strFilePath;
CString rowrange, date;
const int nColNum = 10;
const int nRowNum = 10;
CString strName[nRowNum] = {"张三","李四", "王五", "赵六","钱七","孙八","杨九","总计","",""};
CString strObject[nRowNum] = {"语文","数学", "英语", "物理","化学","生物","历史","地理","政治",""};
srand((int)time(0));
//设置数据
if (!app.CreateDispatch(_T("Excel.Application")))
{
TRACE(_T("无法启动Excel服务器"));
return;
}
// 设置为FALSE时,后面的app.Quit();注释要打开
// 否则EXCEL.EXE进程会一直存在,并且每操作一次就会多开一个进程
books.AttachDispatch(app.get_Workbooks(),true);
//books = app.get_Workbooks();
// 添加一个工作簿,这里没有open操作,在最后调用SaveCopyAs另存为
book = books.Add(covOptional);
// 得到Worksheets
sheets = book.get_Worksheets();
// 得到Worksheet
sheetData.AttachDispatch(sheets.get_Item(COleVariant((short)2)));//2表示第2个工作簿
sheetData.put_Name("成绩单");
//sheet = sheets.get_Item(COleVariant((short)1));
// 得到全部Cells
range.AttachDispatch(sheetData.get_Cells(),true);
//----------------------------------表格-------------------------------------------------
unionRange.AttachDispatch(sheetData.get_Range(_variant_t("A1"),_variant_t("J1")),TRUE);
//----------------合并第一行
unionRange.Merge(COleVariant((long)0));
//-----------------设置背景颜色
Interior = unionRange.get_Interior();
Interior.put_Color(COleVariant((long)RGB(128, 128, 128)));
//----------------设置边框
unionRange.BorderAround(
COleVariant((long)1),
// $xlContinuous = 1 $xlDashDot = 4 $xlDashDotDot = 5 $xlSlantDashDot = 13
// $xlLineStyleNone = -4142 $xlDouble = -4119 $xlDot = -4118 $xlDash = -4115
2,
// $xlHairline = 1 $xlThin = 2 $xlThick = 4 $xlMedium = -4138
5,
// $xlColorIndexBlue = 5
COleVariant((long)RGB(0, 0, 0)));
//----------------设置单元格值
unionRange.put_Value2(COleVariant("成绩单"));
//----------------设置单元格水平居中
unionRange.put_HorizontalAlignment(COleVariant((short)3));
//----------------设置单元格高
unionRange.put_RowHeight(_variant_t(30));
//----------------设置字体
font = unionRange.get_Font();
font.put_Size(COleVariant((short)20));
font.put_Name(COleVariant("楷体_GB2312"));
font.put_Bold(covTrue);
font.put_Color(COleVariant((long)RGB(255,0,0)));
//姓名
for(int i=3; i<nRowNum + 1; i++)
{
rowrange.Format("A%d",i);
range = sheetData.get_Range(COleVariant(rowrange), covOptional); // 获取A1 Range
range.BorderAround(COleVariant((long)1), 2, 5, COleVariant((long)RGB(0, 0, 0)));
range.put_Value2(COleVariant(strName[i - 3]));
}
//科目
for(int i=1; i<nColNum; i++)
{
rowrange.Format("%c2", 'A' + i);
range = sheetData.get_Range(COleVariant(rowrange), covOptional); // 获取A1 Range
range.BorderAround(COleVariant((long)1), 2, 5, COleVariant((long)RGB(0, 0, 0)));
range.put_Value2(COleVariant(strObject[i - 1]));
}
//分数
for(int rowindex = 2; rowindex < nRowNum;rowindex++)
{
for(int j = 1; j < nColNum;j++)
{
rowrange.Format("%c%d",'A'+j,rowindex+1);
range = sheetData.get_Range(COleVariant(rowrange), covOptional); // 获取A1 Range
date.Format("%d", rand()%100);
range.BorderAround(COleVariant((long)1), 2, 5, COleVariant((long)RGB(0, 0, 0)));
range.put_Value2(COleVariant(date));
}
}
//总分
for(int j=1; j<nColNum; j++)
{
CString rowrange;
rowrange.Format("%c%d",'A'+j, nRowNum);
range = sheetData.get_Range(COleVariant(rowrange), covOptional); // 获取A1 Range
range.BorderAround(COleVariant((long)1), 2, 5, COleVariant((long)RGB(0, 0, 0)));
rowrange.Format("=SUM(%c3:%c9)", 'A'+j, 'A'+j);
range.put_Formula(COleVariant(rowrange));
}
//---------------------------------------------图----------------------------------
double left = 100, top = 50, width = 700, height = 300;
CChart chart;