RangePtr r; r=EWS4->get_Range(V("a1"), V("a1")); r->set_Value(V("Species No")); |
所以,对单元格内容的操作实际就是先获得一个要操作的范围(Range),然后再set_Value的过程。
和数据库连接并不很困难。将数据库中的数据写到Excel Worksheet中也不是很难,无非是遍历数据集,然后将对应字段的内容写到相应的单元格里去而已,所以这里我就不详细论述了。公式的输入也是如此。
实际操作的效果如下图:
这里需要说明两个地方。第一是字体和栏目宽度的调整。具体的代码如下:
r=EWS4->get_Range(V(CellRef), V(CellRef2)); r->Font->set_Name(V("Arial")); r->get_Columns()->AutoFit(); r->set_WrapText(V(true)); |
void __fastcall TMainForm::FillDataBtnClick(TObject *Sender) { unsigned int DataHandle; HPALETTE APalette; unsigned short MyFormat; Graphics::TBitmap *Bitmap = new Graphics::TBitmap(); ... ... while (!Table1->Eof) { ... ... CellRef="e"+IntToStr(Count); r=EWS4->get_Range(V(CellRef), V(CellRef)); Bitmap->Assign(Table1Graphic); Bitmap->SaveToClipboardFormat(MyFormat,DataHandle,APalette); Clipboard()->SetAsHandle(MyFormat,DataHandle); EWS4->Paste(V(LPDISPATCH(r)), TNP, 0); ... ... } ... ... delete Bitmap; return; } |
这里采用了Bitmap->Assign,将图形字段的内容作为Bitmap的内容,然后将Bitmap以剪贴板的格式保存到DataHandle中去,并返回保存的格式到MyFormat.然后用Clipbboard的SetAsHandle方法,将DataHandle中的内容以MyFormat格式“拷贝”到剪贴板上。最后,再用Worksheet的Paste方法将剪贴板上的图片拷贝到r指定的地方。