ค้นหาและแทนที่ข้อความในงานนำเสนอ PowerPoint ด้วย C++
ภาพรวม
Aspose.Slides for C++ สามารถค้นหา, ไฮไลต์และแทนที่ข้อความในกรอบข้อความเดี่ยวหรือทั่วทั้งงานนำเสนอได้ แต่ละการดำเนินการยังสามารถแจ้งแอปพลิเคชันเกี่ยวกับการจับคู่แต่ละรายการผ่านผล callback ทำให้สามารถอัปเดตงานนำเสนอพร้อมกับสร้างบันทึกการตรวจสอบที่ประกอบด้วยข้อความที่ตรงกัน, บริบท, ตำแหน่ง, กรอบข้อความและหมายเลขสไลด์ได้
ความสามารถเหล่านี้เป็นประโยชน์สำหรับการตรวจทาน, การลบข้อมูล, การตรวจสอบศัพท์, การทำความสะอาดเทมเพลตและกระบวนการทำรายงานอัตโนมัติ
ในตัวอย่างแรกด้านล่าง เราใช้ไฟล์ชื่อ “sample.pptx” ซึ่งมีกล่องข้อความเดียวบนสไลด์แรกด้วยข้อความต่อไปนี้:

เลือกขอบเขตการค้นหา
ใช้เมธอดบน ITextFrame เพื่อจำกัดการดำเนินการให้กับกรอบข้อความเดียว ใช้เมธอดบน IPresentation เพื่อดำเนินการกับข้อความทั้งหมดที่ใช้ได้ในงานนำเสนอ
| การดำเนินการ | หนึ่งกรอบข้อความ | ทั้งงานนำเสนอ |
|---|---|---|
| ไฮไลต์ข้อความตามตัวอักษร | ITextFrame::HighlightText | IPresentation::HighlightText |
| ไฮไลต์การจับคู่ตาม regular‑expression | ITextFrame::HighlightRegex | IPresentation::HighlightRegex |
| แทนที่ข้อความตามตัวอักษร | ITextFrame::ReplaceText | IPresentation::ReplaceText |
| แทนที่การจับคู่ตาม regular‑expression | ITextFrame::ReplaceRegex | IPresentation::ReplaceRegex |
กำหนดค่าการจับคู่ข้อความ
สำหรับการดำเนินการที่ใช้ข้อความตามตัวอักษร ให้ใช้ ITextSearchOptions เพื่อควบคุมการจับคู่:
- ITextSearchOptions::set_WholeWordsOnly จำกัดการจับคู่ให้เป็นคำเต็มเท่านั้น
- ITextSearchOptions::set_CaseSensitive กำหนดว่าต้องตรงกับการพิมพ์ตัวอักษรหรือไม่
- ITextSearchOptions::set_IncludeNotes รวมบันทึกสไลด์ในการค้นหา, แทนที่และไฮไลต์ระดับงานนำเสนอ
การดำเนินการที่ใช้ regular‑expression จะใช้ System::Text::RegularExpressions::Regex ดังนั้นกฎการจับคู่เช่นความไวต่อกรณีและขอบเขตคำจะกำหนดโดยนิพจน์และตัวเลือกของมัน
ระบุตัวเจ้าของของกรอบข้อความ
กระบวนการประมวลผลข้อความทั่วไปมักได้รับ ITextFrame ขณะค้นหา, แทนที่, ตรวจสอบหรือส่งออกข้อความ ใช้ ITextFrame::get_ParentShape และ ITextFrame::get_ParentCell เพื่อระบุว่าออบเจ็กต์งานนำเสนอใดเป็นเจ้าของกรอบข้อความนั้น
ค่าที่คาดหวังขึ้นอยู่กับเจ้าของ:
| เจ้าของกรอบข้อความ | get_ParentShape |
get_ParentCell |
|---|---|---|
| AutoShape หรือรูปร่างที่บรรจุข้อความอื่น | IShape ที่เป็นเจ้าของ | nullptr |
| เซลล์ตาราง | nullptr |
ICell ที่เป็นเจ้าของ |
เมธอดทั้งสองให้การนำทางแบบอ่านอย่างเดียว การเรียกใช้ไม่ได้เลื่อนกรอบข้อความหรือเปลี่ยนเจ้าของ โค้ดทั่วไปควรตรวจสอบค่าทั้งสองสำหรับ nullptr และจัดการกรณีที่ไม่มีเจ้าของใด ๆ อยู่
ตัวอย่างต่อไปนี้ใช้ SlideUtil::GetAllTextFrames เพื่อวนลูปกรอบข้อความในงานนำเสนอ สำหรับรูปร่าง จะรายงานชื่อรูปร่าง, ชนิดรันไทม์ C++ และสไลด์ที่บรรจุ สำหรับเซลล์ตาราง จะรายงานพิกัดคอลัมน์และแถวที่เริ่มจากศูนย์และสไลด์ที่บรรจุ
#include <DOM/IBaseSlide.h>
#include <DOM/INotesSlide.h>
#include <DOM/IShape.h>
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <Util/SlideUtil.h>
#include <system/console.h>
#include <system/smart_ptr.h>
#include <system/string.h>
using Aspose::Slides::IBaseSlide;
using Aspose::Slides::INotesSlide;
using Aspose::Slides::IShape;
using Aspose::Slides::ISlide;
using Aspose::Slides::ITextFrame;
using Aspose::Slides::Presentation;
using Aspose::Slides::Util::SlideUtil;
using System::AsCast;
using System::Console;
using System::MakeObject;
using System::String;
auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto textFrames = SlideUtil::GetAllTextFrames(presentation, false);
for (const auto& textFrame : textFrames)
{
auto ownerShape = textFrame->get_ParentShape();
if (ownerShape != nullptr)
{
auto shapeName = String::IsNullOrEmpty(ownerShape->get_Name()) ? u"(unnamed)" : ownerShape->get_Name();
auto shapeType = ownerShape->GetType().get_Name();
auto baseSlide = ownerShape->get_Slide();
String slideLabel;
auto slide = AsCast<ISlide>(baseSlide);
if (slide != nullptr)
{
slideLabel = String::Format(u"slide {0}", slide->get_SlideNumber());
}
else
{
auto notesSlide = AsCast<INotesSlide>(baseSlide);
if (notesSlide != nullptr)
{
slideLabel = String::Format(u"notes for slide {0}", notesSlide->get_ParentSlide()->get_SlideNumber());
}
else
{
slideLabel = baseSlide->GetType().get_Name();
}
}
Console::WriteLine(u"Shape: {0}; type: {1}; {2}", shapeName, shapeType, slideLabel);
continue;
}
auto ownerCell = textFrame->get_ParentCell();
if (ownerCell != nullptr)
{
auto baseSlide = ownerCell->get_Slide();
String slideLabel;
auto slide = AsCast<ISlide>(baseSlide);
if (slide != nullptr)
{
slideLabel = String::Format(u"slide {0}", slide->get_SlideNumber());
}
else
{
auto notesSlide = AsCast<INotesSlide>(baseSlide);
if (notesSlide != nullptr)
{
slideLabel = String::Format(u"notes for slide {0}", notesSlide->get_ParentSlide()->get_SlideNumber());
}
else
{
slideLabel = baseSlide->GetType().get_Name();
}
}
Console::WriteLine(u"Table cell: column {0}, row {1}; {2}", ownerCell->get_FirstColumnIndex(), ownerCell->get_FirstRowIndex(), slideLabel);
continue;
}
Console::WriteLine(u"The text frame owner is not available as a shape or table cell.");
}
สำหรับเนื้อหา SmartArt ให้วนลูปรูปร่างใน ISmartArtNode::get_Shapes แล้วเข้าถึงแต่ละ ISmartArtShape::get_TextFrame กรอบข้อความสามารถตามรอยไปยังรูปร่างที่เกี่ยวข้องผ่าน ITextFrame::get_ParentShape ส่วน ITextFrame::get_ParentCell จะคืนค่า nullptr ดังนั้นโค้ดสาขารูปร่างในตัวอย่างจึงจัดการข้อความจากโหนด SmartArt ด้วย
รวบรวมข้อมูลการจับคู่ด้วย Callback
สร้างการใช้งาน IFindResultCallback เพื่อรับการแจ้งเตือนสำหรับการจับคู่แต่ละครั้ง เมธอด IFindResultCallback::FoundResult จะให้กรอบข้อความที่เกี่ยวข้อง, ข้อความต้นฉบับ, ข้อความที่ตรงกันและตำแหน่งการจับคู่
Callback ไม่ได้รับหมายเลขสไลด์โดยตรง การดำเนินการด้านล่างจะดึงมาจาก ISlideComponent::get_Slide และยังจัดการข้อความที่พบในบันทึกสไลด์ผ่าน INotesSlide::get_ParentSlide ด้วย ตัวเลขสไลด์ที่เป็น nullable ทำให้โมเดลผลลัพธ์เดียวกันสามารถแทนข้อความที่เชื่อมโยงกับประเภทสไลด์อื่นได้
#include <DOM/IBaseSlide.h>
#include <DOM/INotesSlide.h>
#include <DOM/IShape.h>
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Table/ICell.h>
#include <IFindResultCallback.h>
#include <system/collections/list.h>
#include <system/nullable.h>
#include <system/smart_ptr.h>
#include <system/string.h>
using Aspose::Slides::IBaseSlide;
using Aspose::Slides::IFindResultCallback;
using Aspose::Slides::INotesSlide;
using Aspose::Slides::IShape;
using Aspose::Slides::ISlide;
using Aspose::Slides::ITextFrame;
using System::AsCast;
using System::MakeObject;
using System::Nullable;
using System::SharedPtr;
using System::String;
using System::Collections::Generic::List;
class TextMatch : public System::Object
{
public:
TextMatch(SharedPtr<ITextFrame> textFrame, String sourceText, String foundText,
int32_t textPosition, Nullable<int32_t> slideNumber)
: TextFrame(textFrame), SourceText(sourceText), FoundText(foundText),
TextPosition(textPosition), SlideNumber(slideNumber)
{
}
SharedPtr<ITextFrame> TextFrame;
String SourceText;
String FoundText;
int32_t TextPosition;
Nullable<int32_t> SlideNumber;
};
class TextSearchCallback : public IFindResultCallback
{
public:
TextSearchCallback()
: Results(MakeObject<List<SharedPtr<TextMatch>>>())
{
}
void FoundResult(SharedPtr<ITextFrame> textFrame, String sourceText,
String foundText, int32_t textPosition) override
{
auto slideNumber = GetSlideNumber(textFrame);
auto result = MakeObject<TextMatch>(textFrame, sourceText, foundText,
textPosition, slideNumber);
Results->Add(result);
}
SharedPtr<List<SharedPtr<TextMatch>>> Results;
private:
static Nullable<int32_t> GetSlideNumber(SharedPtr<ITextFrame> textFrame)
{
auto parentShape = textFrame->get_ParentShape();
auto parentCell = textFrame->get_ParentCell();
SharedPtr<IBaseSlide> baseSlide;
if (parentShape != nullptr)
{
baseSlide = parentShape->get_Slide();
}
else if (parentCell != nullptr)
{
baseSlide = parentCell->get_Slide();
}
else
{
baseSlide = textFrame->get_Slide();
}
auto slide = AsCast<ISlide>(baseSlide);
if (slide != nullptr)
{
return slide->get_SlideNumber();
}
auto notesSlide = AsCast<INotesSlide>(baseSlide);
if (notesSlide != nullptr)
{
auto parentSlide = notesSlide->get_ParentSlide();
return parentSlide->get_SlideNumber();
}
return nullptr;
}
};
สำหรับการดำเนินการแทนที่ FoundText จะมีข้อความที่ตรงกันต้นฉบับ ดังนั้น callback สามารถบันทึกคำที่ถูกแทนที่ได้อย่างแม่นยำ
ไฮไลต์ข้อความ
ใช้เมธอด ITextFrame::HighlightText เพื่อไฮไลต์การจับคู่ข้อความตามตัวอักษรในกรอบข้อความ ส่งผ่าน ITextSearchOptions เพื่อควบคุมการค้นหาและ callback เพื่อรวบรวมรายละเอียดการจับคู่
โค้ดตัวอย่างด้านล่างไฮไลต์ทุกการพบของอักขระ “try” แล้วตามด้วยการไฮไลต์เฉพาะคำเต็ม “to” ทั้งสองการค้นหาจะรายงานการจับคู่ให้ callback เดียวกัน
#include <DOM/IAutoShape.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/TextFind/TextSearchOptions.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
#include <system/console.h>
#include <system/smart_ptr.h>
using Aspose::Slides::IAutoShape;
using Aspose::Slides::Presentation;
using Aspose::Slides::TextSearchOptions;
using Aspose::Slides::Export::SaveFormat;
using System::ExplicitCast;
using System::MakeObject;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
// รับรูปร่างแรกจากสไลด์แรก.
auto shape = ExplicitCast<IAutoShape>(presentation->get_Slide(0)->get_Shape(0));
auto callback = MakeObject<TextSearchCallback>();
auto substringSearchOptions = MakeObject<TextSearchOptions>();
substringSearchOptions->set_CaseSensitive(false);
// ไฮไลต์ทุกการพบของ "try" ในกรอบข้อความ.
shape->get_TextFrame()->HighlightText(
u"try", System::Drawing::Color::get_LightBlue(), substringSearchOptions, callback);
auto wholeWordSearchOptions = MakeObject<TextSearchOptions>();
wholeWordSearchOptions->set_WholeWordsOnly(true);
wholeWordSearchOptions->set_CaseSensitive(false);
// ไฮไลต์เฉพาะคำเต็ม "to".
shape->get_TextFrame()->HighlightText(
u"to", System::Drawing::Color::get_Violet(), wholeWordSearchOptions, callback);
for (auto&& result : callback->Results)
{
auto slideLabel = result->SlideNumber.get_HasValue()
? System::String::Format(u"{0}", result->SlideNumber.get_Value())
: u"Other";
System::Console::WriteLine(u"Found '{0}' at position {1} on slide {2}.",
result->FoundText, result->TextPosition, slideLabel);
}
presentation->Save(u"highlighted_text.pptx", SaveFormat::Pptx);
presentation->Dispose();
ผลลัพธ์:

ไฮไลต์ข้อความโดยใช้ Regular Expressions
เมธอด ITextFrame::HighlightRegex จะไฮไลต์ข้อความที่ตรงกับ regular expression ในกรอบข้อความ
โค้ดต่อไปนี้ไฮไลต์ทุกคำที่มีอักขระเจ็ดตัวหรือมากกว่าและรวบรวมแต่ละการจับคู่:
#include <DOM/IAutoShape.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
#include <system/smart_ptr.h>
#include <system/text/regularexpressions/regex.h>
using Aspose::Slides::IAutoShape;
using Aspose::Slides::Presentation;
using Aspose::Slides::Export::SaveFormat;
using System::ExplicitCast;
using System::MakeObject;
using System::Text::RegularExpressions::Regex;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto shape = ExplicitCast<IAutoShape>(presentation->get_Slide(0)->get_Shape(0));
auto callback = MakeObject<TextSearchCallback>();
auto regex = MakeObject<Regex>(u"\\b[^\\s]{7,}\\b");
shape->get_TextFrame()->HighlightRegex(
regex, System::Drawing::Color::get_Yellow(), callback);
presentation->Save(u"highlighted_text_using_regex.pptx", SaveFormat::Pptx);
presentation->Dispose();
ผลลัพธ์:

ไฮไลต์ข้อความทั่วงานนำเสนอ
ใช้ IPresentation::HighlightText และ IPresentation::HighlightRegex เพื่อค้นหากรอบข้อความที่ใช้ได้ทั้งหมดในงานนำเสนอ ตัวอย่างต่อไปนี้ไฮไลต์คำตามตัวอักษรและที่อยู่อีเมลทั้งหมดพร้อมแยกคอลเลกชันผลลัพธ์สำหรับการค้นหาแต่ละแบบ
#include <DOM/Presentation.h>
#include <DOM/TextFind/TextSearchOptions.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
#include <system/smart_ptr.h>
#include <system/text/regularexpressions/regex.h>
#include <system/text/regularexpressions/regex_options.h>
using Aspose::Slides::Presentation;
using Aspose::Slides::TextSearchOptions;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;
using System::Text::RegularExpressions::Regex;
using System::Text::RegularExpressions::RegexOptions;
auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto termCallback = MakeObject<TextSearchCallback>();
auto searchOptions = MakeObject<TextSearchOptions>();
searchOptions->set_WholeWordsOnly(true);
searchOptions->set_CaseSensitive(false);
presentation->HighlightText(
u"confidential", System::Drawing::Color::get_Orange(), searchOptions, termCallback);
auto emailCallback = MakeObject<TextSearchCallback>();
auto emailRegex = MakeObject<Regex>(
u"\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b", RegexOptions::IgnoreCase);
presentation->HighlightRegex(
emailRegex, System::Drawing::Color::get_Yellow(), emailCallback);
presentation->Save(u"highlighted_presentation.pptx", SaveFormat::Pptx);
presentation->Dispose();
แทนที่ข้อความในกรอบข้อความ
ใช้ ITextFrame::ReplaceText สำหรับข้อความตามตัวอักษรและ ITextFrame::ReplaceRegex สำหรับการแทนที่ตามแบบแผน เมธอดเหล่านี้อัปเดตข้อความที่ตรงกันภายในกรอบข้อความเดิม ซึ่งรักษาการฟอร์แมตส่วนที่อยู่รอบ ๆ แทนการสร้างกรอบข้อความใหม่จากสตริงธรรมดา
ตัวอย่างต่อไปนี้ทำให้ตัวสะกดแบบต่าง ๆ เป็นมาตรฐานแล้วแทนที่ป้ายรุ่น ผล callback เดียวกันบันทึกคำต้นฉบับที่ตรงกันจากทั้งสองการดำเนินการ
#include <DOM/IAutoShape.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/TextFind/TextSearchOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
#include <system/text/regularexpressions/regex.h>
#include <system/text/regularexpressions/regex_options.h>
using Aspose::Slides::IAutoShape;
using Aspose::Slides::Presentation;
using Aspose::Slides::TextSearchOptions;
using Aspose::Slides::Export::SaveFormat;
using System::ExplicitCast;
using System::MakeObject;
using System::Text::RegularExpressions::Regex;
using System::Text::RegularExpressions::RegexOptions;
auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto shape = ExplicitCast<IAutoShape>(presentation->get_Slide(0)->get_Shape(0));
auto callback = MakeObject<TextSearchCallback>();
auto searchOptions = MakeObject<TextSearchOptions>();
searchOptions->set_WholeWordsOnly(true);
searchOptions->set_CaseSensitive(false);
shape->get_TextFrame()->ReplaceText(u"colour", u"color", searchOptions, callback);
auto versionRegex = MakeObject<Regex>(
u"\\bv\\d+(?:\\.\\d+)*\\b", RegexOptions::IgnoreCase);
shape->get_TextFrame()->ReplaceRegex(versionRegex, u"current version", callback);
presentation->Save(u"updated_text_frame.pptx", SaveFormat::Pptx);
presentation->Dispose();
หากการจับคู่หนึ่งครอบคลุมส่วนที่มีฟอร์แมตต่างกัน ให้ตรวจสอบผลลัพธ์เพื่อยืนยันว่าฟอร์แมตที่ใช้สำหรับข้อความแทนที่เป็นอย่างไร
แทนที่ข้อความทั่วงานนำเสนอ
ใช้ IPresentation::ReplaceText และ IPresentation::ReplaceRegex เพื่อทำการเดียวกันทั่วทั้งงานนำเสนอ สิ่งนี้เป็นประโยชน์สำหรับการทำความสะอาดเทมเพลต, การอัปเดตศัพท์และการลบข้อมูล
#include <DOM/Presentation.h>
#include <DOM/TextFind/TextSearchOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
#include <system/text/regularexpressions/regex.h>
using Aspose::Slides::Presentation;
using Aspose::Slides::TextSearchOptions;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;
using System::Text::RegularExpressions::Regex;
auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto callback = MakeObject<TextSearchCallback>();
auto searchOptions = MakeObject<TextSearchOptions>();
searchOptions->set_WholeWordsOnly(true);
searchOptions->set_CaseSensitive(true);
presentation->ReplaceText(u"Contoso", u"Example Corp", searchOptions, callback);
auto accountNumberRegex = MakeObject<Regex>(u"\\bACCT-\\d{6}\\b");
presentation->ReplaceRegex(accountNumberRegex, u"ACCT-REDACTED", callback);
presentation->Save(u"updated_presentation.pptx", SaveFormat::Pptx);
presentation->Dispose();
จัดกลุ่มการจับคู่เพื่อการรายงาน
เพราะผลลัพธ์แต่ละรายการเก็บหมายเลขสไลด์และกรอบข้อความไว้ แอปพลิเคชันจึงสามารถจัดกลุ่มการจับคู่สำหรับการตรวจสอบ, การรายงานหรือกระบวนการรีวิว ตัวอย่างต่อไปนี้จัดกลุ่มผลลัพธ์ที่รวบรวมได้ก่อนตามสไลด์แล้วตามกรอบข้อความ
#include <DOM/ITextFrame.h>
#include <system/console.h>
#include <system/string.h>
#include <map>
#include <vector>
std::map<int32_t, std::map<Aspose::Slides::ITextFrame*,
std::vector<System::SharedPtr<TextMatch>>>> matchesBySlide;
for (auto&& result : callback->Results)
{
int32_t slideKey = result->SlideNumber.get_HasValue()
? result->SlideNumber.get_Value()
: 0;
auto textFrameKey = result->TextFrame.get();
matchesBySlide[slideKey][textFrameKey].push_back(result);
}
for (const auto& slideGroup : matchesBySlide)
{
auto slideLabel = slideGroup.first == 0
? System::String(u"Other")
: System::String::Format(u"{0}", slideGroup.first);
System::Console::WriteLine(u"Slide: {0}", slideLabel);
for (const auto& textFrameGroup : slideGroup.second)
{
auto textFrameText = textFrameGroup.first->get_Text();
System::Console::WriteLine(u" Text frame: {0}", textFrameText);
for (const auto& result : textFrameGroup.second)
{
System::Console::WriteLine(
u" '{0}' at position {1}; context: '{2}'",
result->FoundText, result->TextPosition, result->SourceText);
}
}
}
คำถามที่พบบ่อย
ฉันจะค้นหาเฉพาะกล่องข้อความหนึ่งแทนที่จะค้นทั่วทั้งงานนำเสนอได้อย่างไร?
รับกรอบข้อความของรูปทรงและเรียกใช้ ITextFrame::HighlightText, ITextFrame::HighlightRegex, ITextFrame::ReplaceText หรือ ITextFrame::ReplaceRegex บนกรอบข้อความนั้น เมธอดระดับงานนำเสนอจะดำเนินการกับกรอบข้อความทั้งหมดที่ใช้ได้แทน
ฉันจะจับคู่คำเต็มพร้อมการใช้ตัวพิมพ์ใหญ่‑เล็กที่ถูกต้องได้อย่างไร?
เรียก ITextSearchOptions::set_WholeWordsOnly และ ITextSearchOptions::set_CaseSensitive พร้อมค่า true แล้วส่งตัวเลือกไปยังเมธอดไฮไลต์หรือแทนที่ข้อความตามตัวอักษร สำหรับ regular expression ให้กำหนดขอบเขตคำและความไวต่อกรณีใน System::Text::RegularExpressions::Regex เอง
การค้นหาและการแทนที่สามารถรวมข้อความในบันทึกสไลด์ได้หรือไม่?
ได้ เรียก ITextSearchOptions::set_IncludeNotes พร้อมค่า true เมื่อใช้การดำเนินการข้อความตามตัวอักษรระดับงานนำเสนอ Callback implementation ที่แสดงข้างต้นจะจับคู่บันทึกสไลด์กลับไปยังหมายเลขสไลด์แม่
ฉันจะสร้างรายงานโดยไม่ต้องสแกนงานนำเสนอครั้งที่สองได้อย่างไร?
ส่งการใช้งาน IFindResultCallback ไปยังการไฮไลต์หรือการแทนที่ Callback จะรับการจับคู่ทุกครั้งขณะดำเนินการ ทำให้แอปพลิเคชันสามารถจัดเก็บข้อความต้นฉบับ, ข้อความที่ตรงกัน, ตำแหน่ง, กรอบข้อความและหมายเลขสไลด์ที่ได้มาสำหรับการจัดกลุ่มหรือการส่งออกในภายหลัง
การแทนที่ข้อความจะรักษาการฟอร์แมตไว้หรือไม่?
ITextFrame::ReplaceText และ ITextFrame::ReplaceRegex จะแก้ไขข้อความที่ตรงกันภายในกรอบข้อความที่มีอยู่และรักษาการฟอร์แมตของส่วนที่อยู่รอบ ๆ หากการจับคู่ครอบคลุมส่วนที่มีฟอร์แมตต่างกัน ให้ตรวจสอบผลลัพธ์เพื่อให้แน่ใจว่าการแทนที่ใช้สไตล์ที่ต้องการ