Экспорт Excel в C # - PullRequest
       13

Экспорт Excel в C #

2 голосов
/ 10 августа 2010

Мне нужно портировать файл excel, который деловые люди используют для расчета окончательной цены, на C #, чтобы позже я мог использовать этот алгоритм в приложении Asp.Net.Это то, чем я буду заниматься не впервые, но сегодня меня это поразило.Возможно, Excel может экспортировать в C #.Мне все равно, будет ли это выглядеть некрасиво, но с этого еще нужно начать.

Есть ли какой-нибудь плагин Excel, где я мог бы пометить несколько ячеек ввода и вывода, и эта надстройка экспортировала бы его в C #?

Редактировать

У нашего клиента есть файл Excel, в котором сотрудники могут изменить некоторые поля и увидеть окончательную цену в другом поле.Файл Excel не имеет VB, но использует стандартные математические функции для расчета цены.

Представьте себе файл Excel, используемый для расчета стоимости страхования жизни.

  • В файле Excel есть пустые ячейки, которые должен заполнить работодатель: возраст клиента, вредные привычки, цена страховки, период страхования, скидки и т. Д.
  • В файле Excel есть много ячеек с константами.Константы являются наиболее вероятным коэффициентом (например, ценовой коэффициент для количества лет, на которые заключен договор страхования. Чем больше лет, тем меньше цена)
  • В файле Excel есть много ячеек с промежуточными значениями
  • ExcelВ файле есть одна выходная ячейка с окончательной ценой страхования за весь период

Что мне нужно сделать, это перенести вычисления, сделанные с помощью файла Excel, на C #.

Ответы [ 6 ]

3 голосов
/ 10 августа 2010

Строго говоря, нет смысла «экспортировать Excel в C #». Это потому, что вы обычно хотите экспортировать из Excel data , а C # - язык программирования . Возможно, вы ищете вопрос: «Как я могу сделать данные Excel доступными для программы, написанной на C #?»

Я использовал эту запись в C # Excel Interop. Используйте в качестве отправной точки для чтения данных Excel из приложения, написанного на C #. Это может быть хорошим местом для начала, чтобы понять, как сделать данные Excel видимыми в C #.

Другой способ интерпретации вашего вопроса заключается в том, что вы хотите преобразовать код Visual Basic для приложений (VBA) в книге Excel в C #. Если это так, у вас есть несколько вариантов:

  • Если кода не много, вероятно, было бы проще просто преобразовать алгоритмы и процедуры по одному из VBA в C #.
  • Это довольно уродливый способ, но вы можете импортировать код VBA в Visual Studio и преобразовать его в VB.NET. Тогда вы можете использовать рефлектор , чтобы отобразить код на C #. Конечно, это предполагает, что код VBA не тесно связан с отдельными объектами Excel (листами, строками, ячейками, диапазонами и т. Д.); если это что-то похожее на «бизнес-приложения» Excel, которые я видел (и писал), то вряд ли это так.
  • Для абсолютно огромных приложений с отделенным кодом вы можете рассмотреть решения по миграции с VB6 на .NET, например VB Migration Partner . Я не уверен, насколько хорошо эти решения будут работать, если у вас тесно связанный код, но если рабочая книга огромна, возможно, на это стоит взглянуть.
2 голосов
/ 10 августа 2010

Если вы имеете в виду:

  • У меня есть приложение Excel VBA, которое я хочу портировать на C #

Тогда этот вопрос может вам помочь:

1 голос
/ 10 августа 2010

Если у вашей компании есть SharePoint 2007 или 2010, вы можете взглянуть на Службы Excel , которые позволяют использовать вычисления в книгах Excel через веб-часть SharePoint. Не уверен, сможете ли вы открыть эту веб-часть другим приложениям ASP.NET или нет, но, возможно, стоит изучить

1 голос
/ 10 августа 2010

Я никогда не использовал его, но вы можете посмотреть на это:

http://www.calc4web.com/

Кажется, что вы делаете то, что хотите, только с C ++ вместо C #, ноДело в том, что вы получаете некоторый код, который затем можете скомпилировать и использовать (или перевести, если вам действительно нужно, чтобы он был на C #).

В ответах на этот вопрос:

Понимание/ Моделирование формул из Excel

Джо Эриксон дал ссылку на свой продукт, Spreadsheet Gear, но я также никогда не использовал его.

1 голос
/ 10 августа 2010

Вы не можете действительно создать код из листа.Вы скорее хотите .NET API, который читает файлы Excel.Из которых есть несколько.Это тот, который я использую: http://exceldatareader.codeplex.com/

0 голосов
/ 23 октября 2013

Попробуйте использовать этот код, может он поможет

    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)
        {                
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...