无缝数据转换!使用C++ 实现 Excel文件与CSV之间的相互转换

news/2024/7/21 7:37:34 标签: c++, excel, 开发语言, visualstudio

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();
		}

 效果图

 

 —本文完—


http://www.niftyadmin.cn/n/480732.html

相关文章

Java线程队列的使用-LinkedBlockingQueue

LinkedBlockingQueue是一种基于链表的阻塞队列&#xff0c;它的内部维护了一个数据节点链表。它可以选择指定容量&#xff0c;也可以不指定。如果不指定&#xff0c;默认容量是Integer.MAX_VALUE&#xff0c;也就是无界队列。它采用分离锁&#xff08;ReentrantLock&#xff09…

C++ - 哈希的应用

前面的文章中我们讲解了如何进行哈希表的构建以及使用实现的哈希表来模拟实现unordered_map&#xff0c;在本文中我们将继续来讲解一下哈希的应用。 位图 问题引入 首先我们来引入一个问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&am…

【MySQL】数据库 ⑤

✍导出数据 1、使用 SELECT ... INTO OUTFILE 语句导出数据 SELECT...INTO OUTFILE 是 MySQL 用于导出数据的语句&#xff0c;它允许将查询结果保存到指定的文件中。 该语句的基本语法如下&#xff1a; SELECT column1, column2, ... INTO OUTFILE file_path FIELDS TE…

Android Binder通信原理(七):java 下的C-S

源码基于&#xff1a;Android R 0. 前言 在之前的几篇博文中&#xff0c;对Android binder 的通信原理进行的深入的剖析&#xff0c;这些博文包括&#xff1a;binder 简介、servicemanager启动、service注册、service获取、Java 端的service 注册和获取。 在前一文中&#xf…

论文阅读: (CVPR2023 SDT )基于书写者风格和字符风格解耦的手写文字生成及源码对应

引言 许久不认真看论文了&#xff0c;这不赶紧捡起来。这也是自己看的第一篇用到Transformer结构的CV论文。之所以选择这篇文章来看&#xff0c;是考虑到之前做过手写字体生成的项目。这个工作可以用来合成一些手写体数据集&#xff0c;用来辅助手写体识别模型的训练。本篇文章…

LabVIEW开发基于直流电机的高精度定位火星车

LabVIEW开发基于直流电机的高精度定位火星车 火星探测器一直用于火星探测的自动无人驾驶车辆。这些机器人远程车辆用于避免对人类不公平的条件&#xff0c;并减少与之相关的危险。这一研究领域引起了许多科学家和研究人员的注意&#xff0c;这导致了这一技术领域的显着进步。已…

【运维】Linux系统 AnolisOS [CentOs替代品]

【运维】AnolisOS 安装 CentOs替代品 下载 - OpenAnolis 龙蜥操作系统开源社区 Index of /anolis/ (aliyun.com)

k8s部署单点的minio集群

k8s部署单点的minio集群 文章目录 前言一、基础环境准备二、准备yaml文件三、执行部署四、命令行查看部署结果五、登陆页面访问总结 前言 记录一下根据minio官网的范本部署一个单节点单磁盘的minio服务端。 一、基础环境准备 准备一个k8s集群&#xff0c;配置好存储类 二、…