繁体   English   中英

将Excel导出到C#

[英]Exporting Excel to C#

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

是否有一些Excel插件,我可以标记一些输入和输出单元格,这个添加它会导出到C#?

编辑

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

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

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

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

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

在C#Excel Interop Use上使用这篇文章作为从C#编写的应用程序中读取Excel数据的起点。 这可能是一个开始弄清楚如何在C#中显示Excel数据的好地方。

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

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

如果你的意思是:

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

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

你无法真正从一个spead表创建代码。 您更希望使用读取Excel文件的.NET API。 其中有几个。 这是我使用的那个: http//exceldatareader.codeplex.com/

我从来没用过它,但你可能想看看这个:

http://www.calc4web.com/

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

在这个问题的答案:

从Excel了解/建模公式

Joe Erickson给出了他的产品Spreadsheet Gear的链接,但我从未使用过它。

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

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

    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)
        {                
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM