使用 oledb 在同一个 Excel 工作表上写入多个表

2024-05-11

我正在创建 excel 文件XML编写器 https://msdn.microsoft.com/en-us/library/system.xml.xmlwriter(v=vs.110).aspx由于 xml 属性和文件类型电子表格,它的文件太大,大约 250mb。 我不能使用interop https://learn.microsoft.com/tr-tr/dotnet/csharp/programming-guide/interop/how-to-access-office-onterop-objects,因为用户不想在服务器上设置office 或第三部分 dll。 现在我想,我应该使用 Oledb 来创建 Excel 文件。 我的问题是我无法使用 oledb 在同一张表上写入多个表。

Error:

标准表达式中的数据类型不匹配

My Code:

           connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
           connectionString = string.Format(connectionString, outputFile, "YES");

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();


                foreach (var item in dataSetList)
                {
                    DataSet data = (DataSet)item.Value;
                    // creates the excel sheet



                    //DataSet data = item.Keys
                    //Iterate the tables in the dataset.
                    //Each table will become a tab or sheet in the workbook.
                    int maxcount = 0;
                    for (int kl = data.Tables.Count-1; kl >=0; kl--)
                    {
                        DataTable dt = data.Tables[kl];
                        string sheetSql1 = "";
                        if (dt.Columns.Count > maxcount)
                            maxcount = dt.Columns.Count;

                        var tableSchemaName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        if (tableSchemaName.Select("TABLE_NAME='" + data.DataSetName + "$'").Length == 0)
                        {
                            sheetSql1 = "CREATE TABLE [" + data.DataSetName + "] (";
                            if (dt.Columns.Count > 0)
                            {
                                //if (!dt.Columns[0].ColumnName.StartsWith("somespecificcaption"))
                                //{
                                for (int i = 0; i < dt.Columns.Count; i++)
                                {
                                    string dataType;


                                    //Set appropriate styling of each cell based on datatype
                                    //This depends on how sql server ends up reporting the datatype.
                                    switch (dt.Columns[i].DataType.ToString()) 
                                    {
                                        case "System.DateTime":

                                            dataType = "DateTime";

                                            break;
                                        case "System.Decimal":
                                        case "System.Double":
                                        case "System.Int16":
                                        case "System.Int32":
                                        case "System.Int64":
                                        case "System.Byte":
                                            dataType = "int";

                                            break;
                                        default:
                                            dataType = "varchar(100)";

                                            break;
                                    }
                                    sheetSql1 += "F" + i.ToString() + " " + dataType + ",";
                                    //sheetSql1 += dt.Columns[i].ColumnName + " varchar(50),";

                                }
                                sheetSql1 = sheetSql1.Remove(sheetSql1.Length - 1);
                                sheetSql1 += ")";
                                using (OleDbCommand cmd = new OleDbCommand(sheetSql1, conn))
                                {
                                    cmd.ExecuteNonQuery();
                                }
                                //}
                            }
                        }
                        // Write out row data
                        foreach (DataRow dr in dt.Rows)
                        {
                            string fields = "";
                            string values = "";
                            // now add records into the excel sheet just created
                            sheetSql1 = "INSERT INTO [" + data.DataSetName + "]";
                            for (int j = 0; j < maxcount; j++)
                            {
                                //fields += dt.Columns[j].ColumnName + ",";
                                //values += "@" + dt.Columns[j].ColumnName + ",";
                                fields += "F" + j.ToString() + ",";
                                values += "@F" + j.ToString() + ",";
                            }
                            fields = fields.Remove(fields.Length - 1);
                            values = values.Remove(values.Length - 1);
                            sheetSql1 += "(" + fields + ") VALUES(" + values + ")";
                            using (OleDbCommand cmd = new OleDbCommand(sheetSql1, conn))
                            {
                                for (int k = 0; k < maxcount; k++)
                                {

                                    string output;

                                    //Set appropriate styling of each cell based on datatype
                                    //This depends on how sql server ends up reporting the datatype.
                                    if (k < dt.Columns.Count)
                                    {
                                        switch (dt.Columns[k].DataType.ToString()) // FormatException murat data types
                                        {
                                            case "System.DateTime":
                                                try
                                                {

                                                    output = DateTime.Parse(dr[k].ToString()).ToString("dd/MM/yyyy");
                                                }
                                                catch (FormatException fe) //date is null or empty in dataset
                                                {
                                                    output = "";
                                                }

                                                break;
                                            case "System.Decimal":
                                            case "System.Double":
                                            case "System.Int16":
                                            case "System.Int32":
                                            case "System.Int64":
                                            case "System.Byte":

                                                output = dr[k].ToString().Trim();
                                                break;
                                            default:

                                                output = dr[k].ToString().Trim();
                                                break;
                                        }
                                    }
                                    else
                                        output = "0";
                                    //  cmd.Parameters.AddWithValue("@" + dt.Columns[k].ColumnName, dr[k]);

                                        cmd.Parameters.AddWithValue("@F" + k.ToString(), output);



                                }
                                cmd.ExecuteNonQuery();
                            }
                        }
                    }

                }

                conn.Close();
            }

我想写这样的表格 https://i.stack.imgur.com/fAQyt.png


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 oledb 在同一个 Excel 工作表上写入多个表 的相关文章

随机推荐

  • 如何在 Jersey 容器中配置欢迎文件 (HTML/JSP)

    我有一个 Jersey RESTful Web 服务项目 我已经在中配置了 Jersey 容器web xml一切正常 在同一个项目中 我引入了一个 HTML 页面并包含在
  • 显示 Facebook 墙上我网站上的帖子

    我正在建立我的网站 我想做的事情如下 我想在我的网页上展示我最近在 Facebook 墙上发布的帖子 但只是我自己的帖子 不是其他人都只是我的 Here s an example of how I would like to do it 我
  • Solidity 中的地址(0)是什么

    谁能向我解释一下什么address 0 是在 Solidity 中吗 我在文档中找到了以下内容 但对我来说并没有真正意义 如果目标账户是零账户 地址为0的账户 则交易创建一个新合约 如前所述 该合约的地址不是零地址 而是从发送方及其发送的交
  • Python 仪器驱动程序

    我是一名实验物理学家 并且是Python http en wikipedia org wiki Python 28programming language 29 我发现它非常适合数据分析和脚本编写 实际上我还用它来连接实验室仪器 网络分析仪
  • 如何使用应用程序脚本在 Google 电子表格中移动工作表 [重复]

    这个问题在这里已经有答案了 我想使用应用程序脚本在电子表格中移动工作表 怎么做 最好的直播 你看过吗文档 https developers google com apps script reference spreadsheet sprea
  • 使用查询选择器从 VBA 中抓取

    我使用了该网站的代码来提取数据site https bazashifer ru proflist profnastil Option Explicit Public Sub GetInfo Dim sResponse As String i
  • 使用 Mail_Mime 发送附件到 GMail,收到“noname”附件

    我有一个非常简单的网站表单 可以包含附件 它使用 gmail 的 smtp 发送到 gmail 地址 一切工作都很好 除了文件以 noname 形式到达 没有文件名或扩展名 如果您下载附件并使用正确的文件名重命名它 则该文件可以正常打开 我
  • 输入字符串的格式不正确

    下面的代码产生一个错误 指出我的输入字符串的格式不正确 为什么 private void button7 Click object sender EventArgs e string uriAddTagtoGroup string Form
  • 使用 fread 导入数据后所有列均作为字符

    我导入了一个 CSV 文件 包含文本列和数字列 x lt fread myfile csv header TRUE verbose T na strings c null null 但导入后 当我运行summary x 时 所有列都被视为字
  • 如何知道生成的序列最多是一定长度

    我想知道生成的序列是否少于 2 个条目 gt gt gt def sequence for i in xrange secret yield i 我的低效方法是创建一个列表 并测量其长度 gt gt gt secret 5 gt gt gt
  • 使用 PassportJS 和 Connect for NodeJS 对 Facebook 用户进行身份验证

    我正在尝试使用 connect 将 Passport 集成到我的 NodeJS 服务器中 但似乎无法正确执行 所有指南 示例都使用expressJS 因此我尽力重新格式化代码以与我的代码一起使用 但我似乎无法让它工作 相关部分写在下面 有人
  • 如何在chartjs中绘制多个时间序列,其中每个时间序列都有不同的时间

    例如 我有两个时间序列 s1 2017 01 06 18 39 30 100 2017 01 07 18 39 28 101 and s2 2017 01 07 18 00 00 90 2017 01 08 18 00 00 105 我想在
  • 如何从 Java 中的 String 获取类引用?

    如果我需要返回一个基于字符串实例化的类 例如 从 JSON 创建逻辑 应该如何编写 我最初的想法是一个 switch 但在 Android 框架的 Java 版本中 看起来 switch 语句不允许使用字符串 接下来的想法是 HashMap
  • iOS - 检测应用程序是否正在从 Xcode 运行 [重复]

    这个问题在这里已经有答案了 我试图根据代码是否通过 USB Xcode 调试 运行或在从应用程序商店下载的生产模式 发布 运行来启用 禁用部分代码 我知道检查它是否正在运行DEBUG or RELEASE像这样的模式 ifdef DEBUG
  • 内存不一致与线程交错有何不同?

    我正在编写一个多线程程序 正在研究是否应该使用volatile对于我的布尔标志 关于并发性的文档 oracle Trail 没有解释任何关于memory consistency errors以外 当不同的线程有内存一致性错误时 就会发生内存
  • 如何设计具有相互依赖的测试的 Specs2 数据库测试?

    有没有一些首选的方法来设计Specs2 http etorreborre github com specs2 测试 有很多测试取决于之前测试的结果 下面 您将找到我当前的测试套件 我不喜欢var位于测试片段之间 不过 它们是 需要的 因为某
  • Next JS - 源代码中缺少元标签

    我安装了多个元标记 例如标题 描述 关键字等 但是 它没有在查看源代码中显示这些标签 因此 Facebook 共享卡无法正常工作 我已经安装了og标签 但在 Facebook 上似乎找不到它们Scraper或我的查看来源 然而 它填充在客户
  • Scala 中奇怪的类型不匹配

    我希望这个问题还没有在其他地方得到解答 在这里没有找到答案 在我的本地化系统中 我有一个名为 Language 的类 class Language val name String dict HashMap String String def
  • 在 D3 中在外部加载的 svg 图形上绘图

    我已经从 svg 文件加载了外部图形 我想尝试在其上绘图 但不知道如何操作 我的简单 d3 代码在这里
  • 使用 oledb 在同一个 Excel 工作表上写入多个表

    我正在创建 excel 文件XML编写器 https msdn microsoft com en us library system xml xmlwriter v vs 110 aspx由于 xml 属性和文件类型电子表格 它的文件太大