終了

Extend Script グラフィックセルの親テキストフレームを取得

積極的な参加者 ,
Sep 13, 2022 Sep 13, 2022

リンクをクリップボードにコピー

コピー完了

グラフィックセルの親テキストフレームを取得するのは

なかなか手間がかかるように思いましたのでSDKで拡張してみました。

https://qiita.com/kohakunekotarou/items/e7236c73764285eeda8d 

 

何かの参考になれば・・・

キーワード
SDK , スクリプティング

表示

184

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

参加者 , Sep 14, 2022 Sep 14, 2022

刺激されたので、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
...

投票

翻訳

翻訳
積極的な参加者 ,
Sep 13, 2022 Sep 13, 2022

リンクをクリップボードにコピー

コピー完了

テーブルが複数のテキストフレームにまたがっている場合でも

セルの表示されているテキストフレームを取得できると思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Sep 14, 2022 Sep 14, 2022

リンクをクリップボードにコピー

コピー完了

刺激されたので、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;
}

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Sep 14, 2022 Sep 14, 2022

リンクをクリップボードにコピー

コピー完了

最新

問題なく動きました。

大変参考になります。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines