Answered
Extend Script グラフィックセルの親テキストフレームを取得
グラフィックセルの親テキストフレームを取得するのは
なかなか手間がかかるように思いましたのでSDKで拡張してみました。
https://qiita.com/kohakunekotarou/items/e7236c73764285eeda8d
何かの参考になれば・・・
グラフィックセルの親テキストフレームを取得するのは
なかなか手間がかかるように思いましたのでSDKで拡張してみました。
https://qiita.com/kohakunekotarou/items/e7236c73764285eeda8d
何かの参考になれば・・・
刺激されたので、TableFrameを検索するルートで書いてみました。
#コンパイルしかしていませんので、動作するか不明です。
ErrorCode ExtendTableScriptElement::CellParentTextFrame(ScriptID scriptID, IScriptRequestData* scriptRequestData, IScript* script)
{
if (scriptRequestData->IsPropertyGet())
{
do {
// Script Cell
InterfacePtr<IScriptCellRef> scriptCellRef(script, IID_ISCRIPTCELLREF);
if (!scriptCellRef) {
break;
}
// Table Model
InterfacePtr<ITableModel> tableModel(scriptCellRef->QueryModel());
if (!tableModel) {
break;
}
// Cell Area
GridArea gridarea;
scriptCellRef->GetRange(gridarea);
// Table Layout
InterfacePtr<ITableLayout> tableLayout(tableModel, IID_ITABLELAYOUT);
if (!tableLayout) {
break;
}
// Table Frame UIDRef
UIDRef tableFrameRef = UIDRef::gNull;
// Header/Footer Area
RowRange headerRange = tableModel->GetHeaderRows();
RowRange footerRange = tableModel->GetFooterRows();
// Header/Footer Check
ITableLayout::frame_iterator frameIt = tableLayout->begin_frame_iterator();
ITableLayout::frame_iterator frameItEnd = tableLayout->end_frame_iterator();
if (headerRange.Contains(gridarea.topRow) || footerRange.Contains(gridarea.topRow)) {
// Top Table Frame
if (frameIt == frameItEnd) {
break;
}
tableFrameRef = frameIt->GetFrameRef();
}
else {
for (; frameIt != frameItEnd; frameIt++) {
RowRange bodyRange = frameIt->GetBodyRows();
if (bodyRange.Contains(gridarea.topRow)) {
tableFrameRef = frameIt->GetFrameRef();
break;
}
}
}
if (tableFrameRef == UIDRef::gNull) {
break;
}
// Table Frame
InterfacePtr<ITableFrame> tableFrame(tableFrameRef, IID_ITABLEFRAME);
if (!tableFrame) {
break;
}
// Text Frame
InterfacePtr<ITextFrameColumn> textFrameColumn(tableFrame->QueryFrame());
if (!textFrameColumn) {
break;
}
// MultiColumnTextFrame
InterfacePtr<IMultiColumnTextFrame> multiColumnTextFrame(textFrameColumn->QueryMultiColumnTextFrame());
if (!multiColumnTextFrame) {
break;
}
// Spline
InterfacePtr<IHierarchy> splineHierarchy(Utils<ITextUtils>()->QuerySplineFromTextFrame(multiColumnTextFrame));
if (!splineHierarchy) {
break;
}
// Script
InterfacePtr<IScript> script_Return(splineHierarchy, IID_ISCRIPT);
if (!script_Return) {
break;
}
// ScriptData
ScriptData scriptData(script_Return);
scriptRequestData->AppendReturnData(script, scriptID, scriptData);
return kSuccess;
} while (kFalse);
}
return kFailure;
}
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.