Excel and CSV (Comma-Separated Values) are two commonly used file formats for managing and storing tabular data in various industries. Excel organizes data in rows and columns and provides users with a wide range of advanced features for data manipulation, analysis and visualization, whereas CSV stores data in a plain text format that is lightweight and highly compatible with various applications. Converting Excel files to CSV format can be very helpful when users need to exchange or import Excel data in different programs. Conversely, users who require more advanced data analysis features, such as creating charts or applying formulas, may find it beneficial to convert CSV files to Excel format. In this article, we will demonstrate how to convert Excel to CSV or CSV to Excel in C++ using Spire.XLS for C++.

Install Spire.XLS for C++

There are two ways to integrate Spire.XLS for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.XLS for C++ in a C++ Application

Convert Excel to CSV in C++

Spire.XLS for C++ offers the XlsWorksheet->SaveToFile (LPCWSTR_S fileName, LPCWSTR_S separator, Spire::Common::Encoding* encoding) method to convert a worksheet in an Excel file to CSV. The detailed steps are as follows:

  • Initialize an instance of the Workbook class.
  • Load an Excel file using Workbook->LoadFromFile() method.
  • Get a specific worksheet in the workbook by its index using Workbook->GetWorksheets()->Get(int index) method.
  • Save the worksheet to a CSV file using XlsWorksheet->SaveToFile (LPCWSTR_S fileName, LPCWSTR_S separator, Spire::Common::Encoding* encoding) method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Initialize an instance of the Workbook class
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel file
	workbook->LoadFromFile(L"Input.xlsx");

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Save the worksheet to a CSV file
	sheet->SaveToFile(L"ExcelToCsv.csv", L",", Encoding::GetUTF8());
	workbook->Dispose();
}

C++: Convert Excel to CSV or CSV to Excel

Convert Visible Data in Excel to CSV in C++

When converting an Excel worksheet to CSV using the above code, all data, including both visible and hidden data, will be saved to CSV. If you only want to save visible data in the worksheet to CSV, you can use the XlsWorksheet->SaveToFile (LPCWSTR_S fileName, LPCWSTR_S separator, bool retainHiddenData) method. The detailed steps are as follows:

  • Initialize an instance of the Workbook class.
  • Load an Excel file using Workbook->LoadFromFile() method.
  • Get a specific worksheet in the workbook by its index using Workbook->GetWorksheets()->Get(int index) method.
  • Save visible data in the worksheet to a CSV file using XlsWorksheet->SaveToFile (LPCWSTR_S fileName, LPCWSTR_S separator, bool retainHiddenData) method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Initialize an instance of the Workbook class
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel file
	workbook->LoadFromFile(L"Input.xlsx");

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Save visible data in the worksheet to a CSV file
	sheet->SaveToFile(L"ExcelToCsv1.csv", L",", false);
	workbook->Dispose();
}

C++: Convert Excel to CSV or CSV to Excel

Convert CSV to Excel in C++

To convert a CSV file to Excel, you need to load the CSV file using Workbook->LoadFromFile(LPCWSTR_S fileName, LPCWSTR_S separator) method, then use the Workbook->SaveToFile (LPCWSTR_S fileName, ExcelVersion version) method to save it to an Excel file. The detailed steps are as follows:

  • Initialize an instance of the Workbook class.
  • Load a CSV file with separator using Workbook->LoadFromFile(LPCWSTR_S fileName,LPCWSTR_S separator) method.
  • Get a specific worksheet in the file by its index using Workbook->GetWorksheets()->Get(int index) method.
  • Set ignore error option to ignore errors when saving numbers in a specific cell range as text using Worksheet->GetRange(LPCWSTR_S name)->SetIgnoreErrorOptions(IgnoreErrorType::NumberAsText) method.
  • Auto-fit column widths using Worksheet->GetAllocatedRange()->AutoFitColumns() method.
  • Save the CSV file to an Excel file using Workbook->SaveToFile (LPCWSTR_S fileName, ExcelVersion version) method.
  • C++
#include "Spire.Xls.o.h" 

using namespace Spire::Xls;

int main()
{
	//Initialize an instance of the Workbook class
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load a CSV file with separator
	workbook->LoadFromFile(L"ExcelToCSV.csv", L",");

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Set ignore error option to ignore errors when saving numbers in a specific cell range as text
	sheet->GetRange(L"C2:C11")->SetIgnoreErrorOptions(IgnoreErrorType::NumberAsText);

	//Auto-fit column widths
	sheet->GetAllocatedRange()->AutoFitColumns();

	//Save the file to an Excel XLSX file
	workbook->SaveToFile(L"CsvToExcel.xlsx", ExcelVersion::Version2013);
	workbook->Dispose();
}

C++: Convert Excel to CSV or CSV to Excel

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

In Word, a watermark is a semi-transparent text or image that you can place in the background. Typically, watermarks are used to emphasize something important about a document. For example, you can use it to remind the user that the content is confidential or a draft. Or other times, you may want to add a washout mark to include the company logo in the document. In this article, you will learn how to insert text or image watermarks to Word documents in C++ using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Insert a Text Watermark to Word in C++

Spire.Doc for C++ offers the TextWatermark class to represent a text watermark. The content and appearance of the watermark can be set using the methods under it. Once a text watermark is created, you can apply it to the whole document by using Document->SetWatermark() method. The following are the detailed steps.

  • Create a Document object.
  • Load a Word file using Document->LoadFromFile() method.
  • Create a TextWatermark object.
  • Se the content and appearance of the watermark using the methods under the TextWatermark object.
  • Apply the text watermark to the document using Document->SetWatermrak() method.
  • Save the document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Create a Document object
    intrusive_ptr<Document> document = new Document();

    //Load a Word file
    document->LoadFromFile(L"C:\\Users\\Administrator\\Desktop\\sample.docx");

    //Create a TextWatermark object
    intrusive_ptr<TextWatermark> txtWatermark = new TextWatermark();

    //Set the content and format of the text watermark
    txtWatermark->SetText(L"CONFIDENTIAL");
    txtWatermark->SetFontSize(40);
    txtWatermark->SetSemitransparent(90);
    txtWatermark->SetFontName(L"Arial Black");
    txtWatermark->SetColor(Color::GetBlue());
    txtWatermark->SetLayout(WatermarkLayout::Diagonal);

    //Apply the text watermark to the document
    document->SetWatermark(txtWatermark);

    //Save the document
    document->SaveToFile(L"Output/TextWatermark.docx", FileFormat::Docx2013);
    document->Close();
}

C++: Insert Text or Image Watermarks to Word

Insert an Image Watermark to Word in C++

Likewise, an image watermark can be created using PictureWatermark class. Once created, you can apply it to a Word document using Document->SetWatermark() method. Here are the detailed steps.

  • Create a Document object.
  • Load a Word file using Document->LoadFromFile() method.
  • Create a PictureWatermark object.
  • Set the image and appearance of the watermark using the methods under the PictureWatermark object.
  • Apply the image watermark to the document using Document->SetWatermrak() method.
  • Save the document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Create a Document object
    intrusive_ptr<Document> document = new Document();

    //Load a Word file
    document->LoadFromFile(L"C:\\Users\\Administrator\\Desktop\\sample.docx");

    //Create a PictureWatermark object
    intrusive_ptr<PictureWatermark> pictureWatermark = new PictureWatermark();

    //Specify image for the watermark
    pictureWatermark->SetPicture(L"C:\\Users\\Administrator\\Desktop\\company-png.png");
    pictureWatermark->SetScaling(100);
    pictureWatermark->SetIsWashout(false);

    //Apply the image watermark to the document
    document->SetWatermark(pictureWatermark);

    //Save the document 
    document->SaveToFile(L"Output/ImageWatermark.docx", FileFormat::Docx2013);
    document->Close();
}

C++: Insert Text or Image Watermarks to Word

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Tuesday, 28 March 2023 01:06

C++: Remove Paragraphs in Word

While editing a Word document, there are numerous reasons to delete certain paragraphs in it. For example, it could be as simple as restructuring the document, or removing incorrect or irrelevant information to ensure document accuracy. In this article, you will learn how to programmatically remove paragraphs in a Word document using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Remove All Paragraphs in a Word Document in C++

To remove all paragraphs, you need to loop through all sections in a document and then delete all paragraphs in each section using Section->GetParagraphs()->Clear() method. The following are the detailed steps.

  • Create a Document instance.
  • Load a Word document using Document->LoadFromFile() method.
  • Traverse through each section of the document and then remove all paragraphs in the section using Section->GetParagraphs()->Clear() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify the input and output file paths
 std::wstring inputFile = L"Data\\sample.docx";
 std::wstring outputFile = L"Output\\RemoveAllParagraphs.docx";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Remove paragraphs from every section in the document
 for (int i = 0; i < document->GetSections()->GetCount(); i++)
 {
  intrusive_ptr<Section> section = document->GetSections()->GetItemInSectionCollection(i);
  section->GetParagraphs()->Clear();
 }

 //Save the result document
 document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
 document->Close();
}

C++: Remove Paragraphs in Word

Remove a Specific Paragraph in a Word Document in C++

If you find a paragraph that contains duplicate or useless information, Spire.Doc for C++ allows you to delete the specified paragraph using Section->GetParagraphs()->RemoveAt() method. The following are the detailed steps.

  • Create a Document instance.
  • Load a Word document using Document->LoadFromFile() method.
  • Get a specified section of the document using Document->GetSections()->GetItem() method.
  • Remove a specified paragraph in the section using Section->GetParagraphs()->RemoveAt() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify the input and output file paths
 std::wstring inputFile = L"Data\\sample.docx";
 std::wstring outputFile = L"Output\\RemoveSpecificParagraph.docx";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Get the first section of the document
 intrusive_ptr<Section> sec = document->GetSections()->GetItemInSectionCollection(0);

 //Remove the third paragraph in the section
 sec->GetParagraphs()->RemoveAt(2);

 //Save the result document
 document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
 document->Close();
}

C++: Remove Paragraphs in Word

Remove Blank Paragraphs in a Word Document in C++

When there are many empty paragraphs/lines in a document, it quite necessary to remove them to improve readability. The following are the steps to remove all blank paragraphs/lines in a Word document.

  • Create a Document instance.
  • Load a Word document using Document->LoadFromFile() method.
  • Traverse through all paragraphs in the document and determine whether the paragraph is a blank paragraph.
  • Remove blank paragraphs from the document using section->GetBody()->GetChildObjects()->Remove() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify the input and output file paths
 std::wstring inputFile = L"Data\\Test.docx";
 std::wstring outputFile = L"Output\\RemoveEmptyLines.docx";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Traverse each paragraph in the Word document
 for (int i = 0; i < document->GetSections()->GetCount(); i++)
 {
  intrusive_ptr<Section> section = document->GetSections()->GetItemInSectionCollection(i);

  for (int j = 0; j < section->GetBody()->GetChildObjects()->GetCount(); j++)
  {
   intrusive_ptr<DocumentObject> secChildObject = section->GetBody()->GetChildObjects()->GetItem(j);
   if (secChildObject->GetDocumentObjectType() == DocumentObjectType::Paragraph)
   {
    intrusive_ptr<Paragraph> para = Object::Dynamic_cast<Paragraph>(secChildObject);
    std::wstring paraText = para->GetText();

    //Determine if the paragraph is a blank paragraph
    if (paraText.empty())
    {
     //Remove blank paragraphs
     section->GetBody()->GetChildObjects()->Remove(secChildObject);
     j--;
    }
   }

  }
 }

 //Save the result document
 document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
 document->Close();
}

C++: Remove Paragraphs in Word

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Monday, 27 March 2023 01:27

C++: Create a Fillable Form in Word

Word allows you to create forms that other people can use to input information. Fillable forms are particularly useful when you need to gather data or feedback from many individuals and want to make sure that the formatting is consistent. The tools that you may need for creating a form include:

  • Content Controls: The areas where users input information in a form.
  • Tables: Tables are used in forms to align text and form fields, and to create borders and boxes.
  • Protection: Allows users to populate fields but not to make changes to the rest of the document.

Content controls in Word are containers for content that let users build structured documents. A structured document controls where content appears within the document. There are basically ten types of content controls available in Word 2013. This article focuses on how to create a fillable form in Word consisting of the following seven common content controls using Spire.Doc for C++.

Content Control Description
Plain Text A text field limited to plain text, so no formatting can be included.
Rich Text A text field that can contain formatted text or other items, such as tables, pictures, or other content controls.
Picture Accepts a single picture.
Drop-Down List A drop-down list displays a predefined list of items for the user to choose from.
Combo Box A combo box enables users to select a predefined value in a list or type their own value in the text box of the control.
Check Box A check box provides a graphical widget that allows the user to make a binary choice: yes (checked) or no (not checked).
Date Picker Contains a calendar control from which the user can select a date.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Create a Fillable Form in Word in C++

The StructureDocumentTagInline class provided by Spire.Doc for C++ is used to create structured document tags for inline-level structures (DrawingML object, fields, etc.) in a paragraph. The SDTProperties property and the SDTContent property under this class shall be used to specify the properties and content of the current structured document tag. The following are the detailed steps to create a fillable form with content controls in Word.

  • Create a Document object.
  • Add a section using Document->AddSection() method.
  • Add a table using Section->AddTable() method.
  • Add a paragraph to a specific table cell using TableCell->AddParagraph() method.
  • Create an instance of StructureDocumentTagInline class, and add it to the paragraph as a child object using Paragraph->GetChildObjects()->Add() method.
  • Specify the properties and content of the structured document tag using the methods under the SDTProperties property and the SDTContent property of the StructureDocumentTagInline object. The type of the structured document tag is set through SDTProperties->SetSDTType() method.
  • Prevent users from editing content outside form fields using Document->Protect() method.
  • Save the document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Create a Document object
    intrusive_ptr<Document> doc = new Document();

    //Add a section
    intrusive_ptr<Section> section = doc->AddSection();

    //add a table
    intrusive_ptr<Table> table = section->AddTable(true);
    table->ResetCells(7, 2);

    //Add text to the cells of the first column
    intrusive_ptr<Paragraph> paragraph = table->GetRows()->GetItemInRowCollection(0)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Plain Text Content Control");
    paragraph = table->GetRows()->GetItemInRowCollection(1)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Rich Text Content Control");
    paragraph = table->GetRows()->GetItemInRowCollection(2)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Picture Content Control");
    paragraph = table->GetRows()->GetItemInRowCollection(3)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Drop-Down List Content Control");
    paragraph = table->GetRows()->GetItemInRowCollection(4)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Check Box Content Control");
    paragraph = table->GetRows()->GetItemInRowCollection(5)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Combo box Content Control");
    paragraph = table->GetRows()->GetItemInRowCollection(6)->GetCells()->GetItemInCellCollection(0)->AddParagraph();
    paragraph->AppendText(L"Date Picker Content Control");

    //Add a plain text content control to the cell (0,1)
    paragraph = table->GetRows()->GetItemInRowCollection(0)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    intrusive_ptr<StructureDocumentTagInline> sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::Text);
    sdt->GetSDTProperties()->SetAlias(L"Plain Text");
    sdt->GetSDTProperties()->SetTag(L"Plain Text");
    sdt->GetSDTProperties()->SetIsShowingPlaceHolder(true);
    intrusive_ptr<SdtText> text = new SdtText(true);
    text->SetIsMultiline(false);
    sdt->GetSDTProperties()->SetControlProperties(text);
    intrusive_ptr<TextRange> tr = new TextRange(doc);
    tr->SetText(L"Click or tap here to enter text.");
    sdt->GetSDTContent()->GetChildObjects()->Add(tr);

    //Add a rich text content control to the cell (1,1)
    paragraph = table->GetRows()->GetItemInRowCollection(1)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::RichText);
    sdt->GetSDTProperties()->SetAlias(L"Rich Text");
    sdt->GetSDTProperties()->SetTag(L"Rich Text");
    sdt->GetSDTProperties()->SetIsShowingPlaceHolder(true);
    text = new SdtText(true);
    text->SetIsMultiline(false);
    sdt->GetSDTProperties()->SetControlProperties(text);
    tr = new TextRange(doc);
    tr->SetText(L"Click or tap here to enter text.");
    sdt->GetSDTContent()->GetChildObjects()->Add(tr);

    //Add a picture content control to the cell (2,1)
    paragraph = table->GetRows()->GetItemInRowCollection(2)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::Picture);
    sdt->GetSDTProperties()->SetAlias(L"Picture");
    sdt->GetSDTProperties()->SetTag(L"Picture");
    intrusive_ptr<SdtPicture> sdtPicture = new SdtPicture();
    sdt->GetSDTProperties()->SetControlProperties(sdtPicture);
    intrusive_ptr<DocPicture> pic = new DocPicture(doc);
    pic->LoadImageSpire(L"C:\\Users\\Administrator\\Desktop\\1.png");
    sdt->GetSDTContent()->GetChildObjects()->Add(pic);

    //Add a dropdown list content control to the cell(3,1)
    paragraph = table->GetRows()->GetItemInRowCollection(3)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    sdt->GetSDTProperties()->SetSDTType(SdtType::DropDownList);
    sdt->GetSDTProperties()->SetAlias(L"Dropdown List");
    sdt->GetSDTProperties()->SetTag(L"Dropdown List");
    paragraph->GetChildObjects()->Add(sdt);
    intrusive_ptr<SdtDropDownList> sddl = new SdtDropDownList();
    sddl->GetListItems()->Add(new SdtListItem(L"Choose an item.", L"1"));
    sddl->GetListItems()->Add(new SdtListItem(L"Item 2", L"2"));
    sddl->GetListItems()->Add(new SdtListItem(L"Item 3", L"3"));
    sddl->GetListItems()->Add(new SdtListItem(L"Item 4", L"4"));
    sdt->GetSDTProperties()->SetControlProperties(sddl);
    tr = new TextRange(doc);
    tr->SetText(sddl->GetListItems()->GetItem(0)->GetDisplayText());
    sdt->GetSDTContent()->GetChildObjects()->Add(tr);

    //Add two check box content controls to the cell (4,1)
    paragraph = table->GetRows()->GetItemInRowCollection(4)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::CheckBox);
    intrusive_ptr<SdtCheckBox> scb = new SdtCheckBox();
    sdt->GetSDTProperties()->SetControlProperties(scb);
    tr = new TextRange(doc);
    sdt->GetChildObjects()->Add(tr);
    scb->SetChecked(false);
    paragraph->AppendText(L" Option 1");

    paragraph = table->GetRows()->GetItemInRowCollection(4)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::CheckBox);
    scb = new SdtCheckBox();
    sdt->GetSDTProperties()->SetControlProperties(scb);
    tr = new TextRange(doc);
    sdt->GetChildObjects()->Add(tr);
    scb->SetChecked(false);
    paragraph->AppendText(L" Option 2");

    //Add a combo box content control to the cell (5,1)
    paragraph = table->GetRows()->GetItemInRowCollection(5)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::ComboBox);
    sdt->GetSDTProperties()->SetAlias(L"Combo Box");
    sdt->GetSDTProperties()->SetTag(L"Combo Box");
    intrusive_ptr<SdtComboBox> cb = new SdtComboBox();
    cb->GetListItems()->Add(new SdtListItem(L"Choose an item."));
    cb->GetListItems()->Add(new SdtListItem(L"Item 2"));
    cb->GetListItems()->Add(new SdtListItem(L"Item 3"));
    sdt->GetSDTProperties()->SetControlProperties(cb);
    tr = new TextRange(doc);
    tr->SetText(cb->GetListItems()->GetItem(0)->GetDisplayText());
    sdt->GetSDTContent()->GetChildObjects()->Add(tr);

    //Add a date picker content control to the cell (6,1)
    paragraph = table->GetRows()->GetItemInRowCollection(6)->GetCells()->GetItemInCellCollection(1)->AddParagraph();
    sdt = new StructureDocumentTagInline(doc);
    paragraph->GetChildObjects()->Add(sdt);
    sdt->GetSDTProperties()->SetSDTType(SdtType::DatePicker);
    sdt->GetSDTProperties()->SetAlias(L"Date Picker");
    sdt->GetSDTProperties()->SetTag(L"Date Picker");
    intrusive_ptr<SdtDate> date = new SdtDate();
    date->SetCalendarType(CalendarType::Default);
    date->SetDateFormatSpire(L"yyyy.MM.dd");
    date->SetFullDate(DateTime::GetNow());
    sdt->GetSDTProperties()->SetControlProperties(date);
    tr = new TextRange(doc);
    tr->SetText(L"Click or tap to enter a date.");
    sdt->GetSDTContent()->GetChildObjects()->Add(tr);

    //Allow users to edit the form fields only
    doc->Protect(ProtectionType::AllowOnlyFormFields, L"permission-psd");

    //Save to file
    doc->SaveToFile(L"Output/WordForm.docx", FileFormat::Docx2013);
    doc->Close();
}

C++: Create a Fillable Form in Word

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Friday, 24 March 2023 01:08

C++: Insert Images into Word Documents

Images can add visual variety to documents and convey information that is hard to express through text alone, such as complex concepts or emotions. They are a powerful tool to make your document easier to understand, more engaging, and more memorable. Whether you are designing a report or creating a marketing document, inserting images can enhance your communication with your readers and leave a lasting impression on them. In this article, you will learn how to insert images into Word documents in C++ using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Insert an Image in a Word Document in C++

Spire.Doc for C++ offers the Paragraph->AppendPicture() method to insert an image into a Word document. The detailed steps are as follows:

  • Initialize an instance of the Document class.
  • Add a section using Document->AddSection() method.
  • Add two paragraphs to the section using Section->AddParagraph() method.
  • Add text to the paragraphs using Paragraph->AppendText() method and set formatting.
  • Load an image using Image::FromFile() method.
  • Add the image to the first paragraph using Paragraph->AppendPicture() method.
  • Set width and height for the image using DocPicture->SetWidth() and DocPicture->SetHeight() methods.
  • Set a text wrapping style for the image using DocPicture->SetTextWrappingStyle() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main()
{
 //Initialize an instance of the Document class
 intrusive_ptr<Document> document = new Document();

 //Add a section
 intrusive_ptr<Section> section = document->AddSection();

 //Add the first paragraph
 intrusive_ptr<Paragraph> paragraph1 = section->AddParagraph();
 //Add text to the paragraph and set formatting
 intrusive_ptr <TextRange> tr = paragraph1->AppendText(L"Spire.Doc for C++ is a professional Word library specifically designed for developers to create, read, write, convert, merge, split, and compare Word documents in C++ applications with fast and high-quality performance.");
 tr->GetCharacterFormat()->SetFontName(L"Calibri");
 tr->GetCharacterFormat()->SetFontSize(11.0f);
 paragraph1->GetFormat()->SetLineSpacing(20.0f);
 paragraph1->GetFormat()->SetAfterSpacing(10.0f);

 //Add the second paragraph
 intrusive_ptr<Paragraph> paragraph2 = section->AddParagraph();
 //Add text to the paragraph and set formatting
 tr = paragraph2->AppendText(L"Almost all Word document elements are supported by Spire.Doc for C++, including pages, sections, headers, footers, digital signatures, footnotes, paragraphs, lists, tables, text, fields, hyperlinks, bookmarks, comments, images, style, background settings, document settings and protection. Furthermore, drawing objects including shapes, textboxes, images, OLE objects, Latex Math Symbols, MathML Code and controls are supported as well.");
 tr->GetCharacterFormat()->SetFontName(L"Calibri");
 tr->GetCharacterFormat()->SetFontSize(11.0f);
 paragraph2->GetFormat()->SetLineSpacing(20.0f);

 //Add the image to the first paragraph
 intrusive_ptr<DocPicture> picture = paragraph1->AppendPicture(L"Spire.Doc.png");
 //Set image width and height
 picture->SetWidth(100);
 picture->SetHeight(100);
 //Set text wrapping style for the image
 picture->SetTextWrappingStyle(TextWrappingStyle::Tight);

 //Save the result document
 document->SaveToFile(L"InsertImage.docx", FileFormat::Docx2013);
 document->Close();
}

C++: Insert Images into Word Documents

Insert an Image at a Specified Location in a Word document in C++

Spire.Doc for C++ enables you to insert an image into a Word document and set its position by using the DocPicture->SetHorizontalPosition() and DocPicture->SetVerticalPosition() methods. The detailed steps are as follows:

  • Initialize an instance of the Document class.
  • Add a section using Document->AddSection() method.
  • Add a paragraph to the section using Section->AddParagraph() method.
  • Add text to the paragraph using Paragraph->AppendText() method and set formatting.
  • Load an image using Image::FromFile() method.
  • Add the image to the paragraph using Paragraph->AppendPicture() method.
  • Set width and height for the image using DocPicture->SetWidth() and DocPicture->SetHeight() methods.
  • Set the horizontal position and vertical position for the image using DocPicture->SetHorizontalPosition() and DocPicture->SetVerticalPosition() methods.
  • Set a text wrapping style for the image using DocPicture->SetTextWrappingStyle() method (note that the position settings are not applicable when the text wrapping style is Inline).
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main()
{
 //Initialize an instance of the Document class
 intrusive_ptr<Document> document = new Document();

 //Add a section
 intrusive_ptr<Section> section = document->AddSection();

 //Add a paragraph to the section
 intrusive_ptr<Paragraph> paragraph = section->AddParagraph();

 //Add text to the paragraph and set formatting
 intrusive_ptr<TextRange> tr = paragraph->AppendText(L"The sample demonstrates how to insert an image at a specified location in a Word document.");
 tr->GetCharacterFormat()->SetFontName(L"Calibri");
 paragraph->ApplyStyle(BuiltinStyle::Heading2);

 //Add the image to the paragraph
 intrusive_ptr<DocPicture> picture = paragraph->AppendPicture(L"Spire.Doc.png");

 //Set image size
 picture->SetWidth(100);
 picture->SetHeight(100);

 //Set image position
 picture->SetHorizontalPosition(180.0F);
 picture->SetVerticalPosition(60.0F);

 //Set a text wrapping style for the image (note that the position settings are not applicable when the text wrapping style is Inline)
 picture->SetTextWrappingStyle(TextWrappingStyle::Through);

 //Save the result document
 document->SaveToFile(L"InsertImageAtSpecifiedLocation.docx", FileFormat::Docx);
 document->Close();
}

C++: Insert Images into Word Documents

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Converting PowerPoint presentations to images brings you multiple benefits. For example, it makes it easy for you to share the content with others who may not have access to PowerPoint software; it preserves the formatting of the original presentation, ensuring that the content appears exactly as intended; and it protects the content in the presentation from being edited or modified by others. In this article, you will learn how to convert a PowerPoint Presentation to different image formats in C++ using Spire.Presentation for C++.

Install Spire.Presentation for C++

There are two ways to integrate Spire.Presentation for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Presentation for C++ in a C++ Application

Convert PowerPoint Presentation to JPG or PNG Images in C++

Spire.Presentation for C++ offers the ISlide->SaveAsImage() method which enables you to convert the slides in a PowerPoint presentation to JPG or PNG images. The detailed steps are as follows:

  • Initialize an instance of the Presentation class.
  • Load a PowerPoint presentation using Presentation->LoadFromFile() method.
  • Access the slide collection of the presentation using Presentation->GetSlides() method.
  • Iterate through the slides in the collection.
  • Save each slide to an image stream using ISlide->SaveAsImage() method.
  • Save the image stream to a JPG or PNG file using Stream->Save() method.
  • C++
#include "Spire.Presentation.o.h";

using namespace Spire::Presentation;
using namespace std;

int main()
{

	//Initialize an instance of the Presentation class
	intrusive_ptr⁢Presentation> ppt = new Presentation();

	//Load a PowerPoint presentation
	ppt->LoadFromFile(L"Sample.pptx");

	//Get the slide collection of the presentation
	intrusive_ptr⁢SlideCollection> slides = ppt->GetSlides();

	//Iterate through the slides in the collection
	for (int i = 0; i < slides->GetCount(); i++)
	{
		intrusive_ptr⁢ISlide> slide = slides->GetItem(i);

		//Save each slide to a PNG image
		intrusive_ptr⁢Stream> image = slide->SaveAsImage();
		image->Save((L"Images\\ToImage_img_" + to_wstring(i) + L".png").c_str());
	}

	ppt->Dispose();
}

C++: Convert PowerPoint Presentations to Images (JPG, PNG, SVG)

Convert PowerPoint Presentation to JPG or PNG Images with Specific Size in C++

You can convert the slides in a PowerPoint presentation to JPG or PNG images with a specific size using ISlide->SaveAsImage(int width, int height) method. The detailed steps are as follows:

  • Initialize an instance of the Presentation class.
  • Load a PowerPoint presentation using Presentation->LoadFromFile() method.
  • Access the slide collection of the presentation using Presentation->GetSlides() method.
  • Iterate through the slides in the collection.
  • Save each slide to an image stream using ISlide->SaveAsImage(int width, int height) method.
  • Save the image stream to a JPG or PNG file using Stream->Save() method.
  • C++
#include "Spire.Presentation.o.h";

using namespace Spire::Presentation;
using namespace std;

int main()
{
	//Initialize an instance of the Presentation class
	intrusive_ptr⁢Presentation> ppt = new Presentation();

	//Load a PowerPoint presentation
	ppt->LoadFromFile(L"Sample.pptx");

	//Get the slide collection of the presentation
	intrusive_ptr⁢SlideCollection> slides = ppt->GetSlides();

	//Iterate through the slides in the collection
	for (int i = 0; i < slides->GetCount(); i++)
	{
		intrusive_ptr⁢ISlide> slide = slides->GetItem(i);
		//Save each slide to a PNG image with a size of 600 x 400 pixels
		intrusive_ptr⁢Stream> image = slide->SaveAsImage(600, 400);
		image->Save((L"ImagesWithSpecificSize\\ToImage_img_" + to_wstring(i) + L".png").c_str());
	}

	ppt->Dispose();
}

C++: Convert PowerPoint Presentations to Images (JPG, PNG, SVG)

Convert PowerPoint Presentation to SVG Images in C++

To convert the slides in a PowerPoint presentation to SVG images, you can use the ISlide->SaveToSVG() method. The detailed steps are as follows:

  • Initialize an instance of the Presentation class.
  • Load a PowerPoint presentation using Presentation->LoadFromFile() method.
  • Access the slide collection of the presentation using Presentation->GetSlides() method.
  • Iterate through the slides in the collection.
  • Save each slide to an SVG stream using ISlide->SaveToSVG() method.
  • Save the SVG stream to an SVG file using Stream->Save() method.
  • C++
#include "Spire.Presentation.o.h";

using namespace Spire::Presentation;
using namespace std;

int main()
{
	//Initialize an instance of the Presentation class
	intrusive_ptr⁢Presentation> ppt = new Presentation();

	//Load a PowerPoint presentation
	ppt->LoadFromFile(L"Sample.pptx");

	//Get the slide collection of the presentation
	intrusive_ptr⁢SlideCollection> slides = ppt->GetSlides();

	//Set whether to retain notes while converting PowerPoint to SVG
	ppt->SetIsNoteRetained(true);

	//Iterate through the slides in the collection
	for (int i = 0; i < slides->GetCount(); i++)
	{
		intrusive_ptr⁢ISlide> slide = slides->GetItem(i);

		//Save each slide to an SVG image
		intrusive_ptr⁢Stream> svg = slide->SaveToSVG();
		svg->Save((L"SvgImages\\ToSVG-" + to_wstring(i) + L".svg").c_str());
	}

	ppt->Dispose();
}

C++: Convert PowerPoint Presentations to Images (JPG, PNG, SVG)

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Wednesday, 22 March 2023 00:52

C++: Add or Delete Pages in PDF

When you are handling a PDF document with lots of pages, you will most likely need to add new pages to include more information or remove some redundant pages. In this article, you will learn how to programmatically add or delete pages in a PDF document using Spire.PDF for C++.

Install Spire.PDF for C++

There are two ways to integrate Spire.PDF for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.PDF for C++ in a C++ Application

Add a Blank Page at the End of a PDF Document in C++

Spire.PDF for C++ allows you to add an empty page with specific size and margins at the end of the document using PdfDocument->GetPages()->Add(SizeF* size, PdfMargins* margins) method. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a sample PDF document using PdfDocument->LoadFromFile() method.
  • Create an empty page with the specified size and margins and then append it to the end of the document using PdfDocument->GetPages()->Add(SizeF* size, PdfMargins* margins) method.
  • Save the result document using PdfDocument->SaveToFile () method.
  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//Specify input and output file paths
	wstring inputFile = L"Data\\input.pdf";
	wstring outputFile = L"Output\\InsertEmptyPageAtEnd.pdf";

	//Create a PdfDocument object
	PdfDocument* pdf = new PdfDocument();

	//Load a PDF document 
	pdf->LoadFromFile(inputFile.c_str());

	//Add an empty page at the end of the document
	PdfMargins tempVar(0, 0);
	pdf->GetPages()->Add(new SizeF(PdfPageSize::A4()), &tempVar);

	//Save the result document
	pdf->SaveToFile(outputFile.c_str());
	pdf->Close();

	delete pdf;
}

C++: Add or Delete Pages in PDF

Insert a Blank Page After a Specific Page in PDF in C++

If you want to insert an empty page into a specific position of a PDF document, you can use the PdfDocument->GetPages()->Insert(int index) method. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a sample PDF document using PdfDocument->LoadFromFile() method.
  • Create a blank page and insert it after a specified PDF page using PdfDocument->GetPages()->Insert(int index) method.
  • Save the result document using PdfDocument->SaveToFile () method.
  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//Specify input and output file paths
	wstring inputFile = L"Data\\input.pdf";
	wstring outputFile = L"Output\\InsertEmptyPage.pdf";

	//Create a PdfDocument object
	PdfDocument* pdf = new PdfDocument();

	//Load a PDF document 
	pdf->LoadFromFile(inputFile.c_str());

	//Insert a blank page as the second page
	pdf->GetPages()->Insert(1);

	//Save the result document
	pdf->SaveToFile(outputFile.c_str());
	pdf->Close();

	delete pdf;
}

C++: Add or Delete Pages in PDF

Delete an Existing Page in a PDF Document in C++

For PDF pages containing useless information, you can also remove them using Spire.PDF for C++. The following are the steps to delete a specific page in PDF.

  • Create a PdfDocument object.
  • Load a sample PDF document using PdfDocument->LoadFromFile() method.
  • Remove a specified page from the document using PdfDocument->GetPages()->RemoveAt(int index) method.
  • Save the result document using PdfDocument->SaveToFile () method.
  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//Specify input and output file paths
	wstring inputFile = L"Data\\input.pdf";
	wstring outputFile = L"Output\\DeletePage.pdf";

	//Create a PdfDocument object
	PdfDocument* pdf = new PdfDocument();

	//Load a PDF document 
	pdf->LoadFromFile(inputFile.c_str());

	//Delete the first page in the document
	pdf->GetPages()->RemoveAt(0);

	//Save the result document
	pdf->SaveToFile(outputFile.c_str());
	pdf->Close();

	delete pdf;
}

C++: Add or Delete Pages in PDF

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Tuesday, 21 March 2023 00:50

C++: Merge Excel files into One

Merging Excel files is an essential task when you need to summarize data stored in multiple Excel files. For instance, if you have sales reports for each quarter of the year, you might need to merge them into one file to get a more comprehensive view of the data for the entire year. By merging Excel files, you are able to concentrate on a single organized workbook instead of switching between multiple files. This streamlines your work process and improves efficiency. In this article, you will learn how to merge Excel files into one in C++ using Spire.XLS for C++ library.

Install Spire.XLS for C++

There are two ways to integrate Spire.XLS for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.XLS for C++ in a C++ Application

Merge Multiple Excel Workbooks into One in C++

You can merge multiple Excel workbooks into one by creating a new workbook, then copying worksheets in the original workbooks to the new workbook. The detailed steps are as follows:

  • Put the paths of the original workbooks into a vector.
  • Initialize a Workbook object to create a new workbook and clear the default worksheets in it.
  • Initialize a temporary Workbook object.
  • Iterate through the workbooks in the vector.
  • Load the workbook into the temporary Workbook object using Workbook->LoadFromFile() method.
  • Iterate through the worksheets in the workbook, then copy each worksheet from the workbook to the new workbook using Workbook->GetWorksheets()->AddCopy() method.
  • Save the result workbook to file using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Put the paths of the workbooks into a vector
	std::vector<std::wstring> files = { L"File1.xlsx", L"File2.xlsx", L"File3.xlsx" };;

	//Initialize a Workbook object to create a new workbook
	intrusive_ptr<Workbook> newWorkbook = new Workbook();
	newWorkbook->SetVersion(ExcelVersion::Version2013);
	//Clear the default worksheets
	newWorkbook->GetWorksheets()->Clear();

	//Initialize a temporary Workbook object
	intrusive_ptr<Workbook> tempWorkbook = new Workbook();

	//Iterate through the workbooks in the vector
	for (auto file : files)
	{
		//Load the current workbook
		tempWorkbook->LoadFromFile(file.c_str());
		//Iterate through all worksheets in the workbook
		for (int i = 0; i < tempWorkbook->GetWorksheets()->GetCount(); i++)
		{
			intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(tempWorkbook->GetWorksheets()->Get(i));

			//Copy each worksheet from the workbook to the new workbook
			(intrusive_ptr<XlsWorksheetsCollection>(newWorkbook->GetWorksheets()))->AddCopy(sheet, WorksheetCopyType::CopyAll);
		}
	}

	//Save the result workbook to file
	newWorkbook->SaveToFile(L"MergeExcelFiles.xlsx", ExcelVersion::Version2013);
	newWorkbook->Dispose();
	tempWorkbook->Dispose();
}

C++: Merge Excel files into One

Merge Multiple Excel Worksheets into One in C++

You can merge multiple worksheets into one worksheet by copying the used data range in the original worksheets to the destination worksheet. The following steps show you how to merge two worksheets within the same workbook into one worksheet:

  • Initialize a Workbook object and load an Excel workbook using Workbook->LoadFromFile() method.
  • Get the two worksheets that need to be merged using Workbook->GetWorksheets()->Get(int index) method (the sheet index here is zero-based).
  • Get the used range of the second worksheet using Worksheet->GetAllocatedRange() method.
  • Specify the destination range in the first worksheet using Worksheet->GetRange(int row, int column) method (the row and column indexes here are 1-based).
  • Copy the used range of the second worksheet to the destination range in the first worksheet using CellRange->Copy(CellRange destRange) method.
  • Remove the second worksheet from the workbook using XlsWorksheet->Remove() method.
  • Save the result workbook to file using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h" 

using namespace Spire::Xls;
using namespace std;

int main()
{
	//Initialize a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();
	//Load an Excel workbook
	workbook->LoadFromFile(L"Sample.xlsx");

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet1 = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
	//Get the second worksheet
	intrusive_ptr<Worksheet> sheet2 = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(1));

	//Get the used range in the second worksheet
	intrusive_ptr<CellRange> sourceRange = dynamic_pointer_cast<CellRange>(sheet2->GetAllocatedRange());
	//Specify the destination range in the first worksheet
	intrusive_ptr<CellRange> destRange = dynamic_pointer_cast<CellRange>(sheet1->GetRange(sheet1->GetLastRow() + 1, 1));

	//Copy the used range of the second worksheet to the destination range in the first worksheet
	sourceRange->Copy(destRange);

	//Remove the second worksheet
	sheet2->Remove();

	//Save the result workbook to file
	workbook->SaveToFile(L"MergeExcelWorksheets.xlsx", ExcelVersion::Version2013);
	workbook->Dispose();
}

C++: Merge Excel files into One

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

The find and replace feature in Microsoft Word is an essential tool when editing documents. It enables you to quickly find a specific word or phrase in a Word document and lets you replace all instances of it at once. This is especially helpful in situations where you need to update information or correct misspelled words in large Word documents. In this article, you will learn how to find and replace text in Word documents in C++ using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Find Text and Replace All Its Instances with New Text

You can find a text and replace all its instances with another text easily using the Document->Replace() method. The detailed steps are as follows:

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Find a specific text and replace all its instances with another text using Document->Replace() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;
using namespace std;

int main()
{
 //Initialize an instance of the Document class
 intrusive_ptr<Document> document = new Document();

 //Load a Word document
 document->LoadFromFile(L"Input.docx");

 //Find a specific text and replace all its instances with another text
 document->Replace(L"Spire.Doc", L"Eiceblue", false, true);

 //Save the result document
 document->SaveToFile(L"ReplaceAllInstances.docx", FileFormat::Docx2013);
 document->Close();
}

C++: Find and Replace Text in Word Documents

Find Text and Replace Its First Instance with New Text

Spire.Doc for C++ provides the Document->SetReplaceFirst() method which enables you to change the replacement mode from replacing all instances to replacing the first instance. The following steps explain how to find a text and replace its first instance:

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Change the replacement mode to replace the first instance using Document->SetReplaceFirst(true) method.
  • Replace the first instance of a text with another text using Document->Replace() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;
using namespace std;

int main()
{
 //Initialize an instance of the Document class
 intrusive_ptr<Document> document = new Document();

 //Load a Word document
 document->LoadFromFile(L"Input.docx");

 //Change the replacement mode to replace the first match
 document->SetReplaceFirst(true);

 //Replace the first instance of a text with another text
 document->Replace(L"Spire.Doc", L"Eiceblue", false, true);

 //Save the result document
 document->SaveToFile(L"ReplaceFirstInstance.docx", FileFormat::Docx2013);
 document->Close();
}

C++: Find and Replace Text in Word Documents

Find and Replace Text Using a Regular Expression

You can replace a text matching a regular expression with new text using the Document->Replace() method and passing a Regex instance and the new text to the method as parameters. The detailed steps are as follows:

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Initialize an instance of the Regex class to create a regular expression.
  • Find the text matching the regex and replace it with another text using Document->Replace() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;
using namespace std;

int main()
{
 //Initialize an instance of the Document class
 intrusive_ptr<Document> doc = new Document();
 //Load a Word document
 doc->LoadFromFile(L"Input1.docx");

 //Create a regex to match the text that starts with #
 intrusive_ptr<Regex> regex = new Regex(L"\\#\\w+\\b");

 //Find the text matching the regex and replace it with another text
 doc->Replace(regex, L"Monitor");

 //Save the result document
 doc->SaveToFile(L"ReplaceWithRegex.docx", FileFormat::Docx2013);
 doc->Close();;
}

C++: Find and Replace Text in Word Documents

Find and Replace Text with an Image

Spire.Doc for C++ doesn't offer a direct method to replace text with image, but you can achieve this by inserting the image at the position of the text and then removing the text from the document. The detailed steps are as follows:

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Find a specific text using Document->FindAllString() method and put the found text into a vector.
  • Iterate through the found text in the vector.
  • Initialize an instance of DocPicture class and load an image using DocPicture->LoadImageSpire() method.
  • Get the found text as a single text range and then get the index of the text range in its owner paragraph.
  • Insert an image at the position of the text range and then remove the text range from the document.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;
using namespace std;

int main()
{
 //Initialize an instance of the Document class
 intrusive_ptr<Document> doc = new Document();

 //Load a Word document
 doc->LoadFromFile(L"Input.docx");

 //Find a text in the document and put the found results into a vector
 vector<intrusive_ptr<TextSelection>> selections = doc->FindAllString(L"Spire.Doc", true, true);

 int index = 0;
 intrusive_ptr<TextRange> range = nullptr;

 //Iterate through the found text in the vector
 for (auto selection : selections)
 {
  //Load an image
  intrusive_ptr<DocPicture> pic = new DocPicture(doc);
  pic->LoadImageSpire(L"img.jpg");
  //Get the found text as a single text range
  range = selection->GetAsOneRange();
  //Get the index of the text range in its owner paragraph
  index = range->GetOwnerParagraph()->GetChildObjects()->IndexOf(range);
  //Insert an image at the index
  range->GetOwnerParagraph()->GetChildObjects()->Insert(index, pic);
  //Remove the text range
  range->GetOwnerParagraph()->GetChildObjects()->Remove(range);
 }

 //Save the result document
 doc->SaveToFile(L"ReplaceWithImage.docx", FileFormat::Docx2013);
 doc->Close();
}

C++: Find and Replace Text in Word Documents

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Thursday, 16 March 2023 01:07

C++: Protect or Unprotect Excel Documents

When an Excel document contains some sensitive financial or confidential data, it is essential to protect it during transmission. In MS Excel, you can encrypt an entire workbook with a password to prevent unauthorized access, or just lock selected Excel sheets or individual cells to avoid unwanted modifications. In this article, you will learn how to programmatically protect and unprotect a workbook or a worksheet using Spire.XLS for C++.

Install Spire.XLS for C++

There are two ways to integrate Spire.XLS for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.XLS for C++ in a C++ Application

Password Protect an Entire Workbook in C++

By encrypting an Excel document with a password, you ensure that only you and authorized individuals can read or edit it. The following are the steps to password protect a workbook.

  • Create a Workbook object.
  • Load an Excel document using Workbook->LoadFromFile() method.
  • Protect the Excel workbook with a password using Workbook->Protect() method.
  • Save the result document using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Specify the input and output file paths
	std::wstring inputFile = L"Data\\Budget.xlsx";
	std::wstring outputFile = L"Output\\EncryptWorkbook.xlsx";

	//Create a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel document from disk
	workbook->LoadFromFile(inputFile.c_str());

	//Protect workbook with a password
	workbook->Protect(L"e-iceblue");

	//Save the result document
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
	workbook->Dispose();
}

C++: Protect or Unprotect Excel Documents

Protect a Worksheet with a Specific Protection Type in C++

If you wish to grant people permission to read your Excel document but restrict the types of modifications they are allowed to make on a worksheet, you can protect the worksheet with a specific protection type. The table below lists a variety of pre-defined protection types under the SheetProtectionType enumeration.

Protection Type Allow users to
Content Modify or insert content.
DeletingColumns Delete columns.
DeletingRows Delete rows.
Filtering Set filters.
FormattingCells Format cells.
FormattingColumns Format columns.
FormattingRows Format rows.
InsertingColumns Insert columns.
InsertingRows Insert rows.
InsertingHyperlinks Insert hyperlinks.
LockedCells Select locked cells.
UnlockedCells Select unlocked cells.
Objects Modify drawing objects.
Scenarios Modify saved scenarios.
Sorting Sort data.
UsingPivotTables Use pivot table and pivot chart.
All Do any operations listed above on the protected worksheet.
None Do nothing on the protected worksheet.

The following are the steps to protect a worksheet with a specific protection type.

  • Create a Workbook object.
  • Load an Excel document using Workbook->LoadFromFile() method.
  • Get a specified worksheet using Workbook->GetWorksheets()->Get() method.
  • Protect the worksheet with a protection type using Worksheet->XlsWorksheetBase::Protect (LPCWSTR_S password, SheetProtectionType options) method.
  • Save the result document using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Specify the input and output file paths
	std::wstring inputFile = L"Data\\Budget.xlsx";
	std::wstring outputFile = L"Output\\ProtectWorksheet.xlsx";

	//Create a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel document from disk
	workbook->LoadFromFile(inputFile.c_str());

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Protect the worksheet with the permission password and the specific protect type
	sheet->XlsWorksheetBase::Protect(L"e-iceblue", SheetProtectionType::None);

	//Save the result document
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
	workbook->Dispose();
}

C++: Protect or Unprotect Excel Documents

Allow Users to Edit Ranges in a Protected Worksheet in C++

In certain cases, you may need to allow users to be able to edit selected ranges in a protected worksheet. The following are the detailed steps.

  • Create a Workbook object.
  • Load an Excel document using Workbook->LoadFromFile() method.
  • Get a specified worksheet using Workbook->GetWorksheets()->Get() method.
  • Specify the editable cell ranges using Worksheet->AddAllowEditRange() method.
  • Protect the worksheet with a password using Worksheet->XlsWorksheetBase::Protect() method.
  • Save the result document using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Specify the input and output file paths
	std::wstring inputFile = L"Data\\Budget.xlsx";
	std::wstring outputFile = L"Output\\AllowEditRange.xlsx";

	//Create a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel document from disk
	workbook->LoadFromFile(inputFile.c_str());

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Define a range that allow users to edit while sheet is protected
	sheet->AddAllowEditRange(L"EditableRange", dynamic_pointer_cast<CellRange>(sheet->GetRange(L"A8:A12")));

	//Protect the worksheet with a password
	sheet->XlsWorksheetBase::Protect(L"TestPassword");

	//Save the result document
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
	workbook->Dispose();
}

C++: Protect or Unprotect Excel Documents

Lock Specific Cells in a Worksheet in C++

Normally, the locked option is enabled for all cells in a worksheet. Therefore, before locking a cell or range of cells, all cells must be unlocked. Keep in mind that locking cells doesn't take effect until the worksheet is protected. The following are the detailed steps.

  • Create a Workbook object.
  • Load an Excel document using Workbook->LoadFromFile() method.
  • Get a specified worksheet using Workbook->GetWorksheets()->Get() method.
  • Access the used range in the worksheet and then unlock all cells in the range.
  • Access specific cells and then lock them by setting the parameter of XlsRange->GetStyle()->SetLocked() method to true.
  • Protect the worksheet using Worksheet->XlsWorksheetBase::Protect() method.
  • Save the result document using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Specify the input and output file paths
	std::wstring inputFile = L"Data\\Budget.xlsx";
	std::wstring outputFile = L"Output\\LockCells.xlsx";

	//Create a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel document from disk
	workbook->LoadFromFile(inputFile.c_str());

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Unlock all cells in the used range of the worksheet
	sheet->XlsWorksheet::GetRange()->GetStyle()->SetLocked(false);

	//Lock specific cells
	intrusive_ptr<XlsRange> cells = dynamic_pointer_cast<XlsRange>(sheet->GetRange(L"A1:D1"));
	cells->GetStyle()->SetLocked(true);

	//Protect the worksheet with password
	sheet->XlsWorksheetBase::Protect(L"TestPassword");

	//Save the result document
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
	workbook->Dispose();
}

C++: Protect or Unprotect Excel Documents

Unprotect a Password Protected Worksheet in C++

To remove the protection of a password-protected worksheet, invoke the Worksheet->XlsWorksheetBase::Unprotect() method and pass in the original password as a parameter. The following are the detailed steps.

  • Create a Workbook object.
  • Load an Excel document using Workbook->LoadFromFile() method.
  • Get a specified worksheet using Workbook->GetWorksheets()->Get() method.
  • Unprotect the worksheet with the original password using Worksheet->XlsWorksheetBase::Unprotect(LPCWSTR_S password) method.
  • Save the result document using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h"

using namespace Spire::Xls;

int main()
{
	//Specify the input and output file paths
	std::wstring inputFile = L"Data\\ProtectWorksheet.xlsx";
	std::wstring outputFile = L"Output\\UnprotectWorksheet.xlsx";

	//Create a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Load an Excel document from disk
	workbook->LoadFromFile(inputFile.c_str());

	//Get the first worksheet
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//Unprotect the worksheet using the specified password
	sheet->XlsWorksheetBase::Unprotect(L"e-iceblue");

	//Save the result document
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
	workbook->Dispose();
}

Remove or Reset Password of an Encrypted Workbook in C++

To remove or reset password of an encrypted workbook, you can use the Workbook->UnProtect() method and the Workbook->Protect() method respectively. The following are the steps to load an encrypted Excel document and delete or change the password of it.

  • Create a Workbook object.
  • Specify the open password using Workbook->SetOpenPassword() method.
  • Load an Excel document using Workbook->LoadFromFile() method.
  • Remove the encryption using Workbook->UnProtect() method. Or change the password using Workbook->Protect() method.
  • Save the result document using Workbook->SaveToFile() method.
  • C++
#include "Spire.Xls.o.h" 

using namespace Spire::Xls;

int main()
{
	//Specify the input and output file paths
	std::wstring inputFile = L"Output\\EncryptWorkbook.xlsx";
	std::wstring outputFile = L"Output\\Unprotect.xlsx";

	//Create a Workbook object
	intrusive_ptr<Workbook> workbook = new Workbook();

	//Specify the open password
	workbook->SetOpenPassword(L"e-iceblue");

	//Load an Excel document from disk
	workbook->LoadFromFile(inputFile.c_str());

	//Unprotect workbook
	workbook->UnProtect();

	//Reset password
	//workbook->Protect(L"newpassword");

	//Save the result document
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
	workbook->Dispose();
}

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.