無縫資料轉換!使用C++ 實現 Excel檔案與CSV之間的相互轉換

2023-06-29 21:00:41

CSV格式是一種通用的文字檔案格式,可在多個應用程式之間共用和使用。相比之下,Excel檔案是一種電子試算表格式,通常只能在Microsoft Excel中編輯和檢視。因此,將Excel檔案轉換為CSV格式可使資料更方便地在其他應用程式中使用;而將CSV檔案轉換為Excel格式則有利於在Microsoft Excel中編輯和檢視。這種互相轉換可以方便地在不同應用程式之間交換或分享資料。在本文中,我們將演示如何使用 Spire.XLS for C++ Excel 轉換為 CSV 或將 CSV 轉換為Excel

  • 將 Excel 轉換為 CSV
  • 將 Excel 中的可見資料轉換為 CSV
  • 將 CSV 轉換為 Excel

安裝 Spire.XLS for C++

有兩種方法可以將 Spire.XLS for C++ 整合到您的應用程式中。一種方法是通過 NuGet 安裝它,另一種方法是從我們的網站下載包並將庫複製到您的程式中。通過 NuGet 安裝更簡單,更推薦使用。您可以通過存取以下連結找到更多詳細資訊。

如何將 Spire.XLS for C++ 整合到 C++ 程式中

將 Excel 轉換為 CSV

具體步驟如下:

  • 初始化 Workbook 類的範例。
  • 使用 Workbook->LoadFromFile() 方法載入 Excel 檔案。
  • 使用 Workbook->GetWorksheets()->Get(int index) 方法通過索引獲取工作簿中的特定工作表。
  • 使用 XlsWorksheet->SaveToFile (LPCWSTR_S fileName, LPCWSTR_S separator, Spire::Common::Encoding* encoding) 方法將工作表儲存到 CSV 檔案中。

完整程式碼

#include "Spire.Xls.o.h";

using namespace Spire::Xls;

int main() {
    
    //指定輸出檔案路徑和名稱
    std::wstring inputPath = L"輸入\\";
    std::wstring inputFile = inputPath + L"範例檔案.xlsx";
    std::wstring outputPath = L"輸出\\";
    std::wstring outputFile = outputPath + L"結果檔案.csv";

    //初始化 Workbook 類的範例
    intrusive_ptr<Workbook> workbook = new Workbook();

    //載入Excel檔案
    workbook->LoadFromFile(inputFile.c_str());

    //獲取特定工作表
    intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

    //將工作表儲存為CSV檔案
    sheet->SaveToFile(outputFile.c_str(), L",", Encoding::GetUTF8());
    workbook->Dispose();
}

效果圖

將 Excel 中的可見資料轉換為 CSV

如果只想將工作表中的可見資料儲存為 CSV,具體步驟如下:

  • 初始化 Workbook 類的範例。
  • 使用 Workbook->LoadFromFile() 方法載入 Excel 檔案。
  • 使用 Workbook->GetWorksheets()->Get(int index) 方法通過索引獲取工作簿中的特定工作表。
  • 使用 XlsWorksheet->SaveToFile (LPCWSTR_S fileName, LPCWSTR_S separator, bool retainHiddenData) 方法將工作表中的可見資料儲存到 CSV 檔案中。

完整程式碼

#include "Spire.Xls.o.h";

using namespace Spire::Xls;

int main() {
    
        //指定輸出檔案路徑和名稱
        std::wstring inputPath = L"輸入\\";
        std::wstring inputFile = inputPath + L"範例檔案.xlsx";
        std::wstring outputPath = L"輸出\\";
        std::wstring outputFile = outputPath + L"結果檔案.csv";

        //初始化 Workbook 類的範例
        intrusive_ptr<Workbook> workbook = new Workbook();

        //載入Excel檔案
        workbook->LoadFromFile(inputFile.c_str());

        //獲取特定工作表
        intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

        //將工作表中的可見資料儲存到CSV檔案中
    dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0))->SaveToFile(outputFile.c_str(), L";", false);
        workbook->Dispose();
    }

效果圖

將 CSV 轉換為 Excel

將 CSV 檔案轉換為 Excel的具體步驟如下:

  • 初始化 Workbook 類的範例。
  • 使用 Workbook->LoadFromFile(LPCWSTR_S fileName,LPCWSTR_S separator) 方法載入帶有分隔符的 CSV 檔案。
  • 使用 Workbook->GetWorksheets()->Get(int index) 方法通過索引獲取檔案中的特定工作表。
  • 設定忽略錯誤選項,以在使用 Worksheet->GetRange(LPCWSTR_S name)->SetIgnoreErrorOptions(IgnoreErrorType::NumberAsText) 方法將特定單元格範圍中的數位儲存為文字時忽略錯誤。
  • 使用 Worksheet->GetAllocatedRange()->AutoFitColumns() 方法自動調整列寬。
  • 使用 Workbook->SaveToFile (LPCWSTR_S fileName, ExcelVersion version) 方法將 CSV 檔案儲存到 Excel 檔案中。

完整程式碼

#include "Spire.Xls.o.h";

using namespace Spire::Xls;

int main() {
    
            //指定輸出檔案路徑和名稱
            std::wstring inputPath = L"輸入\\";
            std::wstring inputFile = inputPath + L"範例.csv";
            std::wstring outputPath = L"輸出\\";
            std::wstring outputFile = outputPath + L"CSVToExcel_out.xlsx";

            //初始化 Workbook 類的範例
            intrusive_ptr<Workbook> workbook = new Workbook();

            //載入CSV檔案
            workbook->LoadFromFile(inputFile.c_str(), L",");

            //獲取特定工作表
            intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
        
             //將忽略錯誤選項設定為將特定單元格區域中的數位儲存為文字時忽略錯誤
    dynamic_pointer_cast<CellRange>(sheet->GetRange(L"D2:D12"))->SetIgnoreErrorOptions(IgnoreErrorType::NumberAsText);
            sheet->GetAllocatedRange()->AutoFitColumns();

            //儲存檔案
            workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
            workbook->Dispose();
        }

效果圖

—本文完—