• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

ShellExecuteEx要怎样打印一个excel里面的多个工作表?

a78365135 2008-03-28 09:56:31
或者怎样才能够操作多个工作表?
...全文
171 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
a78365135 2008-03-28
SaveAs的参数该怎么设?
我好象没有找到相关的 资料
回复
diudiuqqqq 2008-03-28
额...网上例子好多...专门讲这方面的书也很好找...系统地学一下这方面对你将来也是有帮助的
回复
a78365135 2008-03-28
但是完全不熟悉啊,能给个例子吗?
回复
diudiuqqqq 2008-03-28
想操作EXCEL最好还是用EXCEL OLE吧
回复
diudiuqqqq 2008-03-28
{
WIN32_FIND_DATA FileData;
HANDLE hSearch;

USES_CONVERSION;
hSearch = FindFirstFile(A2T(strTableName), &FileData);
if (hSearch != INVALID_HANDLE_VALUE) // 找到
{
if(IDYES == ::MessageBox(this->m_hWnd, _T("该文件已经存在,要替换吗?"),
_T("提示"), MB_YESNO))
{
DeleteFile(A2T(strTableName));
}
else
{
return TRUE;
}
}


COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
Font font;
Range cols;

app.CreateDispatch(_T("Excel.Application"));
app.SetVisible(1);
//Get a new workbook.
books = app.GetWorkbooks();
book = books.Add (covOptional);

//Get the first sheet.
sheets =book.GetSheets();
sheet = sheets.GetItem(COleVariant((short)1));

// 设置报表的标题
range = sheet.GetRange(COleVariant(_T("A1")), COleVariant(_T("A1")));
range.SetValue(COleVariant(A2T(strTitle)));
font = range.GetFont();
font.SetBold(covTrue);
font.SetSize(COleVariant(_T("14")));

// 设置项目名
range = sheet.GetRange(COleVariant(_T("A2")), COleVariant(_T("A2")));
range.SetValue(COleVariant(_T("学号")));
range = sheet.GetRange(COleVariant(_T("B2")), COleVariant(_T("B2")));
range.SetValue(COleVariant(_T("姓名")));

// 获得年级数
TCHAR tstr[MAX_PATH];
CHAR strTemp[MAX_PATH];
int nGrade = 0;
std::vector<OBJECTSTRUC *> szVecObj;

nGrade = SendMessage(GetDlgItem(IDC_COMBO_GRADE), CB_GETCURSEL, 0, 0) + 1;

if(!GetObjectFromTable(nGrade, szVecObj))
{
::MessageBox(this->m_hWnd, _T("从表中读取科目信息错误"), _T("提示"), MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}

// 把科目的名称写上去
for(int i = 0; i < szVecObj.size() - 2; i ++)
{
sprintf(strTemp, "%c2", 'C' + i);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
range.SetValue(COleVariant(A2T(szVecObj[i]->m_chaName)));
}

// 添加主科总分
sprintf(strTemp, "%c2", 'C' + szVecObj.size() - 2);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
range.SetValue(COleVariant(_T("主科总分")));

// 添加主科名次
sprintf(strTemp, "%c2", 'C' + szVecObj.size() - 1);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
range.SetValue(COleVariant(_T("主科名次")));

// 添加总分
sprintf(strTemp, "%c2", 'C' + szVecObj.size());
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
range.SetValue(COleVariant(_T("总分")));

// 添加总分名次
sprintf(strTemp, "%c2", 'C' + szVecObj.size() + 1);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
range.SetValue(COleVariant(_T("总分名次")));

// 添加考场说明以及学号、姓名

// 读出表中的所有记录
ADODB::_RecordsetPtr pRS = NULL;
pRS.CreateInstance(__uuidof(ADODB::Recordset));
SendMessage(GetDlgItem(IDC_COMBO_SOURCE_TABLENAME),
WM_GETTEXT, MAX_PATH, (LONG)tstr);
sprintf(strTemp, "SELECT 学号, 姓名 FROM %s", T2A(tstr));
pRS->Open(strTemp, _variant_t((IDispatch *)g_pConn, TRUE),
ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText);

int rows = 3;
for(i = 0; i < g_room.size(); i ++)
{
// 添加考场人数及说明
sprintf(strTemp, "A%d", rows);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
sprintf(strTemp, "%d场%d人", atol(g_room[i].m_chaNo), atol(g_room[i].m_chaPersons));
range.SetValue(COleVariant(A2T(strTemp)));

sprintf(strTemp, "B%d", rows ++);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
range.SetValue(COleVariant(A2T(g_room[i].m_chaDescription)));

// 添加学号和姓名
VARIANT var;
for(int j = 0; j < atol(g_room[i].m_chaPersons); j ++)
{
if(!pRS->adoEOF)
{
sprintf(strTemp, "A%d", rows);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
var = pRS->GetCollect("学号");
range.SetValue(COleVariant(var.lVal));

sprintf(strTemp, "B%d", rows ++);
range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
var = pRS->GetCollect("姓名");
range.SetValue(COleVariant(OLE2T(var.bstrVal)));
pRS->MoveNext();
}
}
}

pRS->Close();

// 保存结果, 退出Excel程序
book.SaveAs(COleVariant(A2T(strTableName)), covOptional,
covOptional, covOptional, covOptional, covOptional,
1,covOptional, covFalse, covOptional, covOptional);
//book.SaveCopyAs(var111);

//VariantClear(&var111);
app.Quit();

return TRUE;
}
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-03-28 09:56
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……