Variant v0, Sheet, XL;
XL = CreateOleObject("Excel.Application");
v0 = XL.OlePropertyGet("Workbooks");
v0.OleProcedure("Add");
Sheet = v0.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);
str = "=СУММ(R[1]C[-";
str += IntToStr(Long);
str += "]:R[11]C[-4])"
Sheet.OlePropertySet("Cells",l,8,str.c_str());
XL.OlePropertySet("Visible", true);
Вставка формул в EXCEL и форматирование ячеек
В ячейке отображается "ЗНАЧ!" Но стоит мне просто в неё стать нажать Ф2 и потом энтер и тогда формула срабатывает.
Может её нужно как то отформатировать, что б она поняла формулу?
И как можно программно объединить ячейки и выделить их рамочкой.
Вот код как экспортирую значения:
Код:
Есть у клетки такое свойство - formula.
Цитата: wanja
Есть у клетки такое свойство - formula.
А как юзать не подскажешь? И как можно обвести ячейки рамкой?
Цитата: Kashuk
И как можно обвести ячейки рамкой?
Приблизительно, так
Код:
typedef enum tagXlBordersIndex
{
xlDiagonalDown = 5,
xlDiagonalUp = 6,
xlEdgeLeft = 7,
xlEdgeTop = 8,
xlEdgeBottom = 9,
xlEdgeRight = 10,
xlInsideVertical = 11,
xlInsideHorizontal = 12
} XlBordersIndex;
typedef enum tagXlLineStyle
{
xlContinuous = 1,
xlDash = -4115,
xlDashDot = 4,
xlDashDotDot = 5,
xlDot = -4118,
xlDouble = -4119,
xlSlantDashDot = 13,
xlLineStyleNone = -4142
} XlLineStyle;
Variant vxlSetBorders(Variant xRange,
bool EdgeLt, bool EdgeTp,
bool EdgeBt, bool EdgeRt,
bool InVert, bool InHorz,
bool DiagDn, bool DiagUp,
int Wt,
XlLineStyle Style,
int ColorIdx
)
{
int i;
Variant bord;
char *bds = "Borders";
char *ls = "LineStyle";
char *wgt = "Weight";
char *ci = "ColorIndex";
if(DiagDn)
{
bord = xRange.OlePropertyGet(bds, xlDiagonalDown);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(DiagUp)
{
bord = xRange.OlePropertyGet(bds, xlDiagonalUp);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeLt)
{
bord = xRange.OlePropertyGet(bds, xlEdgeLeft);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeRt)
{
bord = xRange.OlePropertyGet(bds, xlEdgeRight);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeTp)
{
bord = xRange.OlePropertyGet(bds, xlEdgeTop);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeBt)
{
bord = xRange.OlePropertyGet(bds, xlEdgeBottom);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(InVert)
{
bord = xRange.OlePropertyGet(bds, xlInsideVertical);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(InHorz)
{
bord = xRange.OlePropertyGet(bds, xlInsideHorizontal);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
return xRange;
}
{
xlDiagonalDown = 5,
xlDiagonalUp = 6,
xlEdgeLeft = 7,
xlEdgeTop = 8,
xlEdgeBottom = 9,
xlEdgeRight = 10,
xlInsideVertical = 11,
xlInsideHorizontal = 12
} XlBordersIndex;
typedef enum tagXlLineStyle
{
xlContinuous = 1,
xlDash = -4115,
xlDashDot = 4,
xlDashDotDot = 5,
xlDot = -4118,
xlDouble = -4119,
xlSlantDashDot = 13,
xlLineStyleNone = -4142
} XlLineStyle;
Variant vxlSetBorders(Variant xRange,
bool EdgeLt, bool EdgeTp,
bool EdgeBt, bool EdgeRt,
bool InVert, bool InHorz,
bool DiagDn, bool DiagUp,
int Wt,
XlLineStyle Style,
int ColorIdx
)
{
int i;
Variant bord;
char *bds = "Borders";
char *ls = "LineStyle";
char *wgt = "Weight";
char *ci = "ColorIndex";
if(DiagDn)
{
bord = xRange.OlePropertyGet(bds, xlDiagonalDown);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(DiagUp)
{
bord = xRange.OlePropertyGet(bds, xlDiagonalUp);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeLt)
{
bord = xRange.OlePropertyGet(bds, xlEdgeLeft);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeRt)
{
bord = xRange.OlePropertyGet(bds, xlEdgeRight);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeTp)
{
bord = xRange.OlePropertyGet(bds, xlEdgeTop);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(EdgeBt)
{
bord = xRange.OlePropertyGet(bds, xlEdgeBottom);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(InVert)
{
bord = xRange.OlePropertyGet(bds, xlInsideVertical);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
if(InHorz)
{
bord = xRange.OlePropertyGet(bds, xlInsideHorizontal);
bord.OlePropertySet(ls, Style);
bord.OlePropertySet(wgt, Wt);
bord.OlePropertySet(ci, ColorIdx);
bord = Unassigned;
}
return xRange;
}
Цитата: Kashuk
А как юзать не подскажешь?
Примерно так:
Код:
Variant cell=Sheet.OlePropertyGet("Cells",I1,J1,I2,J2);
cell.OlePropertySet("formula","Твоя формула");
cell.OlePropertySet("formula","Твоя формула");
Цитата: wanja
Примерно так:
Код:
Variant cell=Sheet.OlePropertyGet("Cells",I1,J1,I2,J2);
cell.OlePropertySet("formula","Твоя формула");
cell.OlePropertySet("formula","Твоя формула");
Теперь у меня возникла необходимость делать разрыв страниц.
В екселе записал макрос, что б увидеть какой командой это выполняется, но не знаю как использовать её из билдера, пробовал всяческие варианты OlePropertySet... , но не вышло :(
Но так и не нашел верного. Может кто то уже такое делал, подскажите плиз, что прописать нужно.
Спасибо
Цитата: Kashuk
Теперь у меня возникла необходимость делать разрыв страниц.
В екселе записал макрос, что б увидеть какой командой это выполняется, но не знаю как использовать её из билдера, пробовал всяческие варианты OlePropertySet... , но не вышло :(
Но так и не нашел верного. Может кто то уже такое делал, подскажите плиз, что прописать нужно.
Спасибо
В екселе записал макрос, что б увидеть какой командой это выполняется, но не знаю как использовать её из билдера, пробовал всяческие варианты OlePropertySet... , но не вышло :(
Но так и не нашел верного. Может кто то уже такое делал, подскажите плиз, что прописать нужно.
Спасибо
А при чем тут OlePropertySet ? - это OleProcedure!!
Цитата: koltaviy
А при чем тут OlePropertySet ? - это OleProcedure!!
А как именно не подскажеш? :)
Цитата: Kashuk
А как именно не подскажеш? :)
Примерно так:
Код:
..
exCell = exSh.OlePropertyGet( "Range", "A10" );
hBreak = exSh.OlePropertyGet( "HPageBreaks" );
vBreak = exSh.OlePropertyGet( "VPageBreaks" );
hBreak.OleProcedure( "Add", exCell );
vBreak.OleProcedure( "Add", exCell );
..
exCell = exSh.OlePropertyGet( "Range", "A10" );
hBreak = exSh.OlePropertyGet( "HPageBreaks" );
vBreak = exSh.OlePropertyGet( "VPageBreaks" );
hBreak.OleProcedure( "Add", exCell );
vBreak.OleProcedure( "Add", exCell );
..