【问题标题】:Exporting Excel to C#将 Excel 导出到 C#
【发布时间】:2010-08-10 13:40:48
【问题描述】:

我必须将商务人员用来计算最终价格的 excel 文件移植到 C#,以便以后可以在 Asp.Net 应用程序中使用此算法。这不是我第一次做的事情,但今天它击中了我。也许 Excel 可以导出到 C#。我不在乎它是否会看起来很丑,但这仍然是一个开始。

是否有一些 Excel 插件,我可以在其中标记一些输入和输出单元格,并且这个 add-it 会将它导出到 C#?

编辑

我们的客户有 Excel 文件,员工可以在其中修改某些字段并在另一个字段中查看最终价格。 Excel文件没有任何VB,而是使用标准的数学函数函数来计算价格。

想象一下用于计算实时保险价格的 excel 文件。

  • Excel 文件有公司雇主必须填写的空白单元格:客户年龄、不良习惯、保险价格、保险期限、折扣等
  • Excel 文件有许多带有常数的单元格。常数是最有可能的系数(如保险合同签订年数的价格系数。年数越多,价格越低)
  • Excel 文件包含许多具有中间值的单元格
  • Excel 文件有一个输出单元格,其中包含整个期间的最终保险价格

我要做的就是将使用 excel 文件进行的计算移植到 C#。

【问题讨论】:

  • 我认为您需要向我们提供更多细节。您的意思是要将 Excel 电子表格中的数据导出为可在 C# 应用程序中使用的格式吗?
  • 我认为 OP 希望在他的电子表格中采用 计算逻辑,目前使用公式实现,并生成等效的 C# 实现。

标签: c# excel export


【解决方案1】:

严格来说,“将 Excel 导出为 C#”并没有多大意义。这是因为您通常希望从 Excel 导出的是数据,而 C# 是一种编程语言。也许您正在寻找的问题是“如何使 Excel 数据可用于用 C# 编写的程序?”

我使用this write-up on C# Excel Interop Use 作为从用 C# 编写的应用程序读取 Excel 数据的起点。这可能是开始了解如何使 Excel 数据在 C# 中可见的好地方。

解释您的问题的另一种方法是您希望将 Excel 工作簿中的 Visual Basic for Applications (VBA) 代码转换为 C#。如果是这种情况,您有几个选择:

  • 如果代码不多,最简单的方法是一次一个地将算法和过程从 VBA 转换为 C#。
  • 这是一种非常丑陋的方式,但您可以将 VBA 代码导入 Visual Studio 并将其上转换为 VB.NET。然后您可以使用reflector 将代码反映到C#。当然,这假设 VBA 代码与单个 Excel 对象(工作表、行、单元格、范围等)没有紧密耦合;如果它与我见过(和写过)的 Excel“业务应用程序”类似,那不太可能。
  • 对于具有解耦代码的绝对巨大应用程序,您可以考虑使用 VB6 到 .NET 迁移解决方案,例如 VB Migration Partner。如果您的代码紧密耦合,我不确定这些解决方案的效果如何,但如果工作簿很大,则可能值得一看。

【讨论】:

    【解决方案2】:

    如果你的意思是:

    • 我有一个希望移植到 C# 的 Excel VBA 应用程序

    那么这个问题可能会有所帮助:

    【讨论】:

    • 我没想到 OP 可能想要将 VBA 转换为 C#。很好的收获。
    【解决方案3】:

    您无法真正从电子表格创建代码。您宁愿想要一个读取 excel 文件的 .NET API。其中有几个。这是我使用的一个: http://exceldatareader.codeplex.com/

    【讨论】:

      【解决方案4】:

      我从未使用过,但您可能想看看这个:

      http://www.calc4web.com/

      它似乎可以做你想做的事,只是用 C++ 而不是 C#,但关键是你得到一些代码,然后你可以编译和使用(或者如果你真的需要它是 C#,可以翻译)。

      在这个问题的答案中:

      Understanding / Modeling formulas from Excel

      Joe Erickson 提供了一个指向他的产品 Spreadsheet Gear 的链接,但我也从未使用过。

      【讨论】:

        【解决方案5】:

        如果您的公司有 SharePoint 2007 或 2010,您可能需要查看 Excel Services,它允许您通过 SharePoint Web 部件在 Excel 工作簿中使用计算。不确定您是否能够将该 Web 部件公开给其他 ASP.NET 应用程序,但可能值得研究

        【讨论】:

          【解决方案6】:

          尝试使用此代码,可能会有所帮助

              public static void DataSetsToExcel(DataSet dataSet, string filepath)
              {
                  try
                  {
                      string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0 Xml;";
                      string tablename = "";
                      DataTable dt = new DataTable();
                      foreach (System.Data.DataTable dataTable in dataSet.Tables)
                      {
                          dt = dataTable;
                          tablename = dataTable.TableName;
                          using (OleDbConnection con = new OleDbConnection(connString))
                          {
                              con.Open();
                              StringBuilder strSQL = new StringBuilder();
                              strSQL.Append("CREATE TABLE ").Append("[" + tablename + "]");
                              strSQL.Append("(");
                              for (int i = 0; i < dt.Columns.Count; i++)
                              {
                                  strSQL.Append("[" + dt.Columns[i].ColumnName + "] text,");
                              }
                              strSQL = strSQL.Remove(strSQL.Length - 1, 1);
                              strSQL.Append(")");
          
                              OleDbCommand cmd = new OleDbCommand(strSQL.ToString(), con);
                              cmd.ExecuteNonQuery();
          
                              for (int i = 0; i < dt.Rows.Count; i++)
                              {
                                  strSQL.Clear();
                                  StringBuilder strfield = new StringBuilder();
                                  StringBuilder strvalue = new StringBuilder();
                                  for (int j = 0; j < dt.Columns.Count; j++)
                                  {
                                      strfield.Append("[" + dt.Columns[j].ColumnName + "]");
                                      strvalue.Append("'" + dt.Rows[i][j].ToString().Replace("'", "''") + "'");
                                      if (j != dt.Columns.Count - 1)
                                      {
                                          strfield.Append(",");
                                          strvalue.Append(",");
                                      }
                                      else
                                      {
                                      }
                                  }
                                  if (strvalue.ToString().Contains("<br/>"))
                                  {
                                      strvalue = strvalue.Replace("<br/>", Environment.NewLine);
                                  }
                                  cmd.CommandText = strSQL.Append(" insert into [" + tablename + "]( ")
                                      .Append(strfield.ToString())
                                      .Append(") values (").Append(strvalue).Append(")").ToString();
                                  cmd.ExecuteNonQuery();
                              }
                              con.Close();
                          }
                      }
                  }
                  catch (Exception ex)
                  {                
                  }
              }
          

          【讨论】:

            猜你喜欢
            • 2013-11-08
            • 2014-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多