将Excel转换为word_excel如何将横排变成竖排

将Excel转换为word_excel如何将横排变成竖排本次转换用到了NPOI里面的方法,会经过封装成为dll,在.net平台和unity都测试通过。下面主要讲一下思路:1.将表格读取为DataTable类型2.z

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

本次转换用到了NPOI里面的方法,会经过封装成为dll,在.net平台和unity都测试通过。下面主要讲一下思路:

1.将表格读取为DataTable类型

2.逐行读取DataTable的内容

3.根据读取到内容生成对应的XML表即可。

下面讲述一下具体的实现:

在ReadTable中进行路径设置

public class ReadTable
    {
        string tablepath = "";
        public ReadTable(string  path)
        {
            tablepath = path;
        }

        public DataTable TableToDataTable()
        {
            DataTable  table = new DataTable();
            if (tablepath == ""|| tablepath == string.Empty)
            {
                return null;
            }
            else
            {

                if (File.Exists(tablepath))
                {
                    ExcelAnalysis excel = new ExcelAnalysis();
                    table= excel.ExcelToDataTable(tablepath, false);
                }
                else
                {
                    table = null;
                }
                return table;
            }
        }

    }

ExcelAnalysis这个类里面的方法,将表格转换为DataTable

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Data;
using System.IO;
namespace TableToXml
{
    class ExcelAnalysis
    {

        /// <summary>
        /// 将excel导入到datatable
        /// </summary>
        /// <param name="filePath">excel路径</param>
        /// <param name="isColumnName">第一行是否是列名</param>
        /// <returns>返回datatable</returns>
        public DataTable ExcelToDataTable(string filePath, bool isColumnName)
        {
            DataTable dataTable = null;
            FileStream fs = null;
            DataColumn column = null;
            DataRow dataRow = null;
            IWorkbook workbook = null;
            ISheet sheet = null;
            IRow row = null;
            ICell cell = null;

            int startRow = 0;
            try
            {
                using (fs = File.OpenRead(filePath))
                {
                  
                    if (filePath.IndexOf(".xlsx") > 0)
                    {
                        workbook = new XSSFWorkbook(fs);
                    }

                  
                    else if (filePath.IndexOf(".xls") > 0)
                    {
                        workbook = new HSSFWorkbook(fs);
                    }

                    if (workbook != null)
                    {
                        if (workbook.NumberOfSheets > 3)
                        {
                            sheet = workbook.GetSheetAt(4);//读取第三个sheet,也能循环读取每个sheet            
                        }
                        else
                        {
                            sheet = workbook.GetSheetAt(0);//自己的读取默认的第一个           
                        }


                        dataTable = new DataTable();
                        if (sheet != null)
                        {
                            int rowCount = sheet.LastRowNum + 1;//+1 包括列名的行,总行数

                            if (rowCount > 0)
                            {
                                IRow firstRow = sheet.GetRow(0);//第一行
                                int cellCount = firstRow.LastCellNum;//列数

                                //构建datatable的列
                                if (isColumnName)
                                {
                                    startRow = 0;//要读取列名则=0 否则=1
                                    for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                                    {
                                        cell = firstRow.GetCell(i);
                                        if (cell != null)
                                        {
                                            if (cell.StringCellValue != null)
                                            {
                                                column = new DataColumn(cell.StringCellValue);
                                                dataTable.Columns.Add(column);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                                    {
                                        column = new DataColumn("column" + (i + 1));
                                        dataTable.Columns.Add(column);
                                    }
                                }

                                //填充行
                                for (int i = startRow; i < rowCount; ++i) //要读取列名则i<rowCount 否则i <= rowCount
                                {
                                    row = sheet.GetRow(i);
                                    if (row == null) continue;

                                    dataRow = dataTable.NewRow();
                                    for (int j = row.FirstCellNum; j < cellCount; ++j)
                                    {
                                        cell = row.GetCell(j);
                                        if (cell == null)
                                        {
                                            dataRow[j] = "";
                                        }
                                        else
                                        {
                                            //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
                                            switch (cell.CellType)
                                            {
                                                case CellType.Blank:
                                                    dataRow[j] = "";
                                                    break;
                                                case CellType.Numeric:
                                                    short format = cell.CellStyle.DataFormat;
                                                    //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
                                                    if (format == 14 || format == 31 || format == 57 || format == 58)
                                                        dataRow[j] = cell.DateCellValue;
                                                    else
                                                        dataRow[j] = cell.NumericCellValue;
                                                    break;
                                                case CellType.String:
                                                    dataRow[j] = cell.StringCellValue;
                                                    break;
                                            }
                                        }
                                    }
                                    dataTable.Rows.Add(dataRow);
                                }
                            }
                        }
                    }
                    else
                    {
                      // ("文件打开失败,请关闭文档");
                    }
                }
              
                return dataTable;
            }
            catch (Exception e)
            {
           
                if (fs != null)
                {
                    fs.Close();
                }
                return null;
            }
        }
      
    }



}

DataTableToXml 是将读取到的数据源转换为XML,并输出

using System;
using System.Data;
using System.Xml;

namespace TableToXml
{
    /// <summary>
    /// 将读取到的datatable存储到XML中
    /// </summary>
   public class DataTableToXml
    {
        DataTable dataTable;
        string xmlPath;
        /// <summary>
        /// 实例化对象
        /// </summary>
        /// <param name="dtb">自行加载的table</param>
        /// <param name="outPath">Xml的输出路径,不填默认输出在桌面上</param>
        public DataTableToXml(DataTable dtb, string outPath="")
        {
            if (outPath==""|| outPath==null)
            {
                outPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            }
            
            dataTable = dtb;
            xmlPath = outPath;
        }
  

        /// <summary>
        /// 根据数据源生成Xml
        /// </summary>
        /// <param name="path">XML文件的输出路径</param>
        /// <param name="outname">XML文件的输出文件名</param>
        /// <param name="rootname">跟节点的名字</param>
        private void CreateXml(string path,string outname="test",string rootname="root")
        {
            XmlDocument document = new XmlDocument();//创建XmlDocument对象

            XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "UTF-8", "");//xml文档的声明部分
            document.AppendChild(declaration);       
            XmlElement root = document.CreateElement(rootname);//根节点
            document.AppendChild(root);
            if (dataTable!=null)
            {
                DataRow[] drs = dataTable.Select();
              
                for (int i = 0; i < drs.Length; i++)
                {//行
                    XmlElement zwerks = document.CreateElement("Rows" + i);
                    root.AppendChild(zwerks);
                    for (int j = 0; j < dataTable.Columns.Count; j++)
                    {//列
                      
                        XmlElement tab= document.CreateElement("coloumns"+j);
                         tab.InnerText = drs[i][j].ToString();
                        zwerks.AppendChild(tab);
                    }
                }

            }
            document.Save(path+ outname + ".xml");//将生成好的xml保存到.xml文件中
        }
        /// <summary>
        /// 将datatable生成Xml,默认存放在桌面上
        /// </summary>
        public void DtoXml(string path)
        {
            CreateXml(path);
        }
    }
}

里面的所有变量都需要在实例化的时候进行赋值

在.net中这样调用即可将Excel转换为word_excel如何将横排变成竖排在Unity中可将编译后的dll放置在unity 的Plugins文件夹下使用,同样能达到效果,具体如下:将Excel转换为word_excel如何将横排变成竖排

最后我已经将所有需要的dll打包,放置在CSDN了,5个币就可下载(真不贵,我前前后后两天呢),今天六一,能不能赚个棒棒糖呢?如果你没有币可以私信我哦,给你发!!!

下载链接如下:https://download.csdn.net/download/mo_qi_qi/19320074

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171952.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 温度传感器 JUMO芯片铂电阻各型号优点

    温度传感器JUMO芯片铂电阻德国久茂Jumo品牌介绍:德国JUMOGmbH&KG公司成立于1948年,位于德国中部城市Fulda。公司经过六十多年的发展,已经成为欧洲著名的仪表制造厂商,公司主要致力于生产高质量的传感器、变送器及控制器,可提供工业温度、压力、湿度、液位、流量、pH值、电导率、氧化还原值的测量、控制及记录产品。坦泼秋尔(TPQE):德国久茂Jumo中国区唯…

    2022年4月6日
    43
  • 国外大容量网盘_百度云网盘高速下载

    国外大容量网盘_百度云网盘高速下载之前在《Mac端软件下载站》这篇文章中有提到:一些网站是采用的国外收费网盘,比如:UsersCloud、ClickUpload、Turbobit、Nitroflare、Rapidgator、Uploaded…这类收费网站就和国内的城通网盘一个模样(应该或多或少大家都有下载过城通网盘上的文件吧),差不多都是下面这种模样????????‍♂️:限制2个小时内只能下载一次限制单线程下载限速到几十KB/s不支持文件续传但其实很多国外软件在谷歌上只能找到这种网盘上的资源,那怎么下载呢?▍1Mi

    2025年9月30日
    3
  • c++利用mutex(互斥量)实现多线程「建议收藏」

    c++利用mutex(互斥量)实现多线程「建议收藏」C++使用内核对象互斥体(Mutex)实现线程同步锁,当两个线程共同访问一个共享资源时,Mutex可以只向一个线程授予访问权。下面的例子模拟了售票系统,定义了两个售票线程///ConsoleApplication1.cpp:定义控制台应用程序的入口点。////mutex#include”stdafx.h”#include<stdio.h>#include<windows.h>#include<process.h>void__cdecl.

    2022年6月26日
    28
  • windows环境下tomcat部署war包[通俗易懂]

    windows环境下tomcat部署war包[通俗易懂]1.从Eclipse中将项目打包成war包,Runas&gt;&gt;MavenInstall,然后将war包放在tomcat\webapps下,如图所示2.然后运行tomcat\bin目录下的startup.bat(运行后悔在webapps下生成相应名称的目录)3.运行成功,使用Postman测试成功…

    2022年6月2日
    51
  • ceres之LM算法「建议收藏」

    ceres之LM算法「建议收藏」Ceres作为一个优化算法库,在许多领域中有着至关重要的作用,比如slam系统中的优化问题-集束调整BA,就可以通过Ceres去实现,官方文档地址:http://ceres-solver.org/nnls_tutorial.html#bundle-adjustment本文主要是解析ceres中的LM算法过程,参考代码地址:https://github.com/ceres-solver/ceres-solver/tree/master/internal/ceres一、主要流程先贴个图,L.

    2022年10月1日
    3
  • 通过pycharm安装python_JAVA开发环境

    通过pycharm安装python_JAVA开发环境Python开发环境搭建与helloWorld测试1.去官网下载然后傻瓜式安装2.下载开发IDE:这里选用pychram下载地址:pychram官网新建一个工厂后写简单的helloworld然后:找到你工程的文件,Helloworld.py最后点击OK即可看运行结果:pycha…

    2022年8月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号