全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
小编最近在做GIS开发的时候遇到这么一个需求,需要从EXCEL里面读取属性数据,然后将这些属性数据按照一定格式写入word。尽管小编当年也学过两年的C++,当然仅仅是学过,并且学过点皮毛,但是没有接触过这方面的东西。不过最后还是把代码写出来了,这里分享下:
STEP ONE:VC读取EXCEL
VC读取EXCEL的方法很多,有OLE,有ODBC,有ADO等等,不过小编不怎么喜欢微软的东西,于是采用了一个开源库BasicExcel,尽管这个库对中文的支持不算太好,不过经过我的一些修改,完全可以满足我的需求。这里附上一段代码,这是我封装的两个函数:
/*
* 读取excel文件并获取7个变量
*/
bool ReadXlsGetVars(CString &a1,CString &a2,CString &a3,CString &a4,CString &a5,CString &a6,CString &a7)
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("All Files(*.xls)|*.xls||"),AfxGetMainWnd()); //构造文件打开对话框
CString strPath;
if(dlg.DoModal() == IDOK)
{
BasicExcel e;
strPath = dlg.GetPathName();
CStringA strPathA(strPath);
const char *p = strPathA.GetString();
e.Load(p);
BasicExcelWorksheet* sheet = e.GetWorksheet("Sheet1");
BasicExcelCell* cell;
if (sheet){
cell=sheet->Cell(1,2);
getCellCon(cell,a1);
cell=sheet->Cell(2,2);
getCellCon(cell,a2);
cell=sheet->Cell(3,2);
getCellCon(cell,a3);
cell=sheet->Cell(4,2);
getCellCon(cell,a4);
cell=sheet->Cell(5,2);
getCellCon(cell,a5);
cell=sheet->Cell(6,2);
getCellCon(cell,a6);
cell=sheet->Cell(7,2);
getCellCon(cell,a7);
}
else
{
return false;
}
return true;
}
else
{
return false;
}
}
/*
返回单元格内容
/
void getCellCon(BasicExcelCell cell,CString &str)
{
switch (cell->Type())
{
case BasicExcelCell::UNDEFINED:
str="";
break;
case BasicExcelCell::INT:
str.Format(_T("%d"),cell->GetInteger());
break;
case BasicExcelCell::DOUBLE:
str.Format(_T("%lf"),cell->GetDouble());
break;
case BasicExcelCell::STRING:
str=CString(cell->GetString());
break;
case BasicExcelCell::WSTRING:
str=CString(cell->GetWString());
break;
}
}
STEP TWO 写入word
这步是比较纠结的一步,使用com组件,不过总算还是搞定了,下面是我封装的写入word代码:
/*
* 写入word的函数
*/
bool WritDoc(CString a1,CString a2,CString a3,CString a4,CString a5,CString a6,CString a7)
{
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("All Files(*.doc)|*.doc||"),AfxGetMainWnd()); //构造文件打开对话框
CString strPath; //声明变量
if(dlg.DoModal() == IDOK) //判断是否按下"打开"按钮
{
strPath = dlg.GetPathName(); //获得文件路径
//Word应用程序
COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application app;
//初始化连接
app.CreateDispatch(_T("word.Application"));
Documents docs;
CComVariant b(false),c(0),d(true);
_Document doc;
docs.AttachDispatch( app.GetDocuments());
doc.AttachDispatch(docs.Add(vOpt,&b,&c,&d));
Selection sel=app.GetSelection();
Paragraphs oParas;
Paragraph oPara;
Range oRange;
_Font oFont;
//开始写入文件
sel.TypeText(a1+_T("工程"));
sel.TypeParagraph();//另起一段
sel.TypeText(_T("初步设计审查意见"));
sel.TypeParagraph();
sel.TypeParagraph();
sel.TypeText(_T("武汉市城乡建设委员会前期策划处:"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t武汉市城市建设投资开发集团有限公司报审的《"+a1+_T("工程初步设计》及其《初步设计概算书》,由武汉市政工程设计研究院有限责任公司编制,我办对该项目进行了审查,现将审查意见汇总如下:")));
sel.TypeParagraph();
sel.TypeText(_T("\t\t一、项目概要及总体结论"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t(一)项目概要"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t拟建"+a1+_T("位于三环线以北,拟建工程场地位于武汉市硚口区与东西湖区交界处金银湖南街。金山大道以南,凌云东路以西,是金银湖片区重要的东西城市次干道。道路全长约")+a2+_T(",道路红线宽")+a3+_T("。定位为")+a4+_T(",")+a5+_T(",设计车速为")+a6+_T("。")));
sel.TypeParagraph();
sel.TypeText(_T("\t\t项目建设内容为道路、交通、排水、绿化及照明工程。"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t(二)总体结论"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t本工程初步设计内容基本执行了修建规划及工程可行性研究报告批复的要求。设计文件资料基本齐全,主要技术方案合理可行,其编制深度基本达到相关规定的要求。原则同意初步设计成果。"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t二、道路沿线自然地理概况"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t(一)道路现状及地形地貌"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t项目范围内有9座高压铁塔。道路沿线被交道路中,起点为金海东路,现状为水泥砼路面,止点为凌云西路现状亦为水泥砼路面,路面状况良好。道路红线范围内无其他市政管线。场地地势较为平坦,地形标高一般为")+a7+_T("左右。"));
sel.TypeParagraph();
sel.TypeText(_T("\t\t沿线系侵蚀堆积波状平原,原始地貌单元属于长江Ⅱ级阶地。"));
//设置文件格式
oParas=doc.GetParagraphs();
for(int i0=1;i0<=2;i0++)
{
oPara=oParas.Item(i0);
oPara.SetAlignment(1);//设置文本格式:0左对齐,1居中对齐,2右对齐
oRange=oPara.GetRange();
oFont=oRange.GetFont();
oFont.SetSize(22);//表示字体的大小
oFont.SetBold(1);//0表示是不加粗,1表示加粗
oRange.SetFont(oFont);
}
for(int i=4;i<=15;i++)
{
oPara=oParas.Item(i);
oPara.SetAlignment(0);//设置文本格式:0左对齐,1居中对齐,2右对齐
oRange=oPara.GetRange();
oFont=oRange.GetFont();
oFont.SetSize(16);//表示字体的大小
oFont.SetName(_T("仿宋_GB2312"));
if(i==6||i==7||i==10||i==12||i==13)oFont.SetBold(1);
oRange.SetFont(oFont);
}
COleVariant vFalse((short)FALSE);
doc.SaveAs(COleVariant(strPath),vFalse,vFalse,COleVariant(_T("")),vFalse
,COleVariant(_T("")),vFalse,vFalse,vFalse,vFalse,vFalse,vFalse,vFalse,vFalse,vFalse,vFalse); //保存
app.SetVisible(false);
//释放环境
sel.ReleaseDispatch();
doc.ReleaseDispatch();
docs.ReleaseDispatch();
app.ReleaseDispatch();
return true;
}
else
{
return false;
}
}
关于这个项目:
bug:写完word后系统会存在一个word进程,至今没搞定,希望高手指教。
下载:猛击这里下载
FAQ:使用vs2005编译即可,里面有测试数据。
解压密码:malagis.com