htm文件转换为excel的问题 - C++ Builder / Windows SDK/API
各位老大,我想将操作的结果保存到excel中去,但要对excel进行格式设置,使其整体美观。我的操作如下:
先自己写好excel的模板,然后将其另存为htm文件,然后再程序中加载该htm文件并对其进行操作,我可以实现添加、删除功能,但这只是针对Htm文件而言的。此时我想再把它给转回到Excel中去并保存对该文件的操作,该如何进行呢?
[解决办法]
如果你的文件就是excel的格式的。那应该没有问题。
你是不会用ole操作excel???还是什么。我语文实在不好。真的看不懂你的意思
[解决办法]
用OLE操作Excel, 这个比较容易. 我也是没有看懂, 你目前遇到的主要问题是什么?
[解决办法]
如果你的html里面還是表格的話,可以這樣。
WideString W;
TMemoryStream *ms=new TMemoryStream();
try {
char S[]={0xFF,0xFE};
ms->Write(S,sizeof(S));
W = Memo1->Text;//Memo1里面存的是你html文件的源代碼
ms->Write(W.c_bstr(),W.Length() * sizeof(WideChar));
ms->Position=0;
ms->SaveToFile("c:\abc.xls");
}
__finally {
delete ms;
}
[解决办法]
void __fastcall TMain::BitBtn10Click(TObject *Sender){ int vehno,axlenum,Totalweight,grnum,limitweight,overld,speed; int axleweigh[8]; AnsiString ss,stemp,ts; String autotype,handtype,Dtime,vehid; char* data_buf; int i,j; int overaxle; int t[4]; String axletype[4]; //EditQClear(); axletype[0]="①"; axletype[1]="②"; axletype[2]="⑤"; axletype[3]="⑦"; //---把数据导出到Excel表中--- try { BitBtn10->Enabled=false; String filename1,filename2,strXlsFile; int pagenum; filename1=""; //SaveD->FileEditStyle=""; if(SaveD->Execute()) { filename1=SaveD->FileName;//+".xls"; } else { filename1="d:\\daw50报表.xls"; } if(filename1!=""); { if(!DBGrid4->DataSource->DataSet->Active) // 数据集没有打开就返回 return; // 表格的行数 DBGrid4->DataSource->DataSet->Last(); int nRowCount(DBGrid4->DataSource->DataSet->RecordCount + 1); nRowCount = nRowCount < 2? 2: nRowCount; // 表格的列数 int nColCount(39); nColCount = nColCount < 1? 1: nColCount; int pnum=65530;// 530 int filenum= nRowCount/pnum+1; DBGrid4->DataSource->DataSet->First(); for(int hlpnum=1;hlpnum<=filenum;hlpnum++) { if(hlpnum<filenum) pagenum=pnum; else pagenum=nRowCount-(hlpnum-1)*pnum-1; //------------------------------------- filename2=filename1+"0"+IntToStr(hlpnum); strXlsFile=filename2; //============== FILE * ofp; TStringList *HTMList; int FieldType[10]={0,0,0,0,2,0,0,0}; bool ret; char *sFileName; char FileName[200]; sFileName=filename2.c_str();//"./mytest.csv"; sprintf(FileName,"%s.xls\0", sFileName); ofp=fopen(FileName,"a+"); if(ofp==NULL){ ShowMessage("文件无法创建!!"); return; } fputs("<table border='1' style='border-style: solid'>\n", ofp); fflush(ofp); fputs("<tr height=24 >\n", ofp); //ss="路段名称"; // fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss="路段名称:"; fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); fputs("</tr>\n", ofp); fflush(ofp); fputs("<tr height=24 >\n", ofp); for(int j=0; j<10; j++) { // 标题行的行高 //String ss; switch(j) { case 0: ss="编号"; break; case 1: ss="时间"; break; case 2: ss="车牌号码"; break; case 3: ss="总重"; break; case 4: ss="限重"; break; case 5: ss="超重"; break; case 6: ss="速度"; break; case 7: ss="人工车型"; break; case 8: ss="自动车型"; break; case 9: ss="轴数"; break; case 10: ss="行使里程"; break; case 11: ss="实际收费"; break; } fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); } fputs("</tr>\n", ofp); for(int i=0; i<pagenum; i++) { //------读取数据------------------- vehno=DBGrid4->DataSource ->DataSet->FieldByName("vehNo")->AsInteger; Dtime=DBGrid4->DataSource ->DataSet->FieldByName("datetime")->AsString; vehid=DBGrid4->DataSource ->DataSet->FieldByName("vehid")->AsString; axlenum=DBGrid4->DataSource ->DataSet->FieldByName("TotalNum")->AsInteger; //grnum=DBGrid4->DataSource ->DataSet->FieldByName("AXleNum")->AsInteger; Totalweight=DBGrid4->DataSource ->DataSet->FieldByName("Totalweigh")->AsInteger; // overld=DBGrid4->DataSource ->DataSet->FieldByName("overld")->AsInteger; speed=DBGrid4->DataSource ->DataSet->FieldByName("speed")->AsInteger; autotype=DBGrid4->DataSource->DataSet->FieldByName("autotype")->AsString; handtype=DBGrid4->DataSource->DataSet->FieldByName("handtype")->AsString; // ts=DBGrid4->DataSource ->DataSet->FieldByName("VEHTYPE")->AsString; if(axlenum>=2&&axlenum<6) limitweight=Newlimit[axlenum-2]; else limitweight= Newlimit[4]; overld=0; if(Totalweight>limitweight) overld=Totalweight-limitweight; //--------------------------------- fflush(ofp); fputs("<tr height=24 >\n", ofp); //--------------------------- ss=IntToStr(vehno); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=Trim(Dtime); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=Trim(vehid); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=IntToStr(Totalweight); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=IntToStr(limitweight); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=IntToStr(overld); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=IntToStr(speed); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss= Trim(handtype); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss= Trim(autotype); if(ss=="类车")ss="五类车"; fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); ss=IntToStr(axlenum); fprintf(ofp, "<td height=24 >%s</td>\n", ss.c_str()); //------------- //--下一行--- DBGrid4->DataSource->DataSet->Next(); } fputs("</table>\n", ofp); fclose(ofp); } //for for }//for if BitBtn10->Enabled=true; } catch(...) { BitBtn10->Enabled=true; }}//---------------------------------------