Как сделать так, чтобы каждый раз, когда пользователь нажимает на кнопку, она помещала 2 строки в лист Excel в ASP.net?

#c# #asp.net #excel

Вопрос:

В настоящее время я создаю веб-сайт, который просто представляет пользователю строку и кнопку, и я намерен сделать так, чтобы, когда пользователь нажимает кнопку, она затем сохраняла строку и другую заранее определенную строку на листе Excel. Идея заключается в том, что каждый раз, когда пользователь нажимает кнопку, он сохраняет строку на улице и записывает ее вместе с листом Excel. Однако это работает не так, как я предполагал, и во второй раз, когда пользователь нажимает кнопку, это выдает мне следующую ошибку в Workbook.Save(); функции:

Система.Время выполнения.Взаимодействия.Исключение COMException

Это делает его таким, что он сохраняет только первую строку, но вылетает, когда я пытаюсь написать вторую. Кто-нибудь знает решение этой проблемы?

Чтобы открыть книгу и рабочий лист, я использую следующий код:

 protected void Page_Load(object sender, EventArgs e)
{
    oXL = new Excel.Application();
    oXL.Visible = false;
    TextBox1.Text = line[0];
    if (File.Exists(@"C:UsersGuilhermesourcereposPAPDados.xlsx") == false)
    {
        oXL.Visible = false;

        oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
    }
    else
    {
        oWB = (Excel._Workbook)(oXL.Workbooks.Open(@"C:UsersGuilhermesourcereposPAPDados.xlsx"));
    }
}
 

и

 oSheet = (Excel._Worksheet)oWB.Sheets["Folha1"];
oSheet.Activate();

//Add table headers going cell by cell.

lastUsedRow = oSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row;

oSheet.Cells[1, lastUsedRow] = TextBox1.Text;
oSheet.Cells[2, lastUsedRow] = "Boa Ideia";

oWB.Save();

File.WriteAllLines(@"C:UsersGuilhermesourcereposPAPIdeias.txt", line.Skip(1).ToArray());            
Page.Response.Redirect(Page.Request.Url.ToString(), true);
oXL.Visible = true;
oXL.UserControl = true;
 

Если есть какая-либо необходимость в дополнительном коде, просто спросите в комментариях.

Комментарии:

1. Превосходить… на самом деле обычно не следует использовать в качестве серверной части веб-сайта; если вы используете API взаимодействия Office COM, он даже не поддерживается и не лицензирован для этого сценария, IIRC; буквально любая реальная база данных была бы предпочтительнее; возможно ли это хотя бы немного переработать? (и это до обсуждения таких вопросов, как параллелизм, переработка пула приложений, кластеры серверов и т. Д.)

2. @MarcGravell Я могу использовать 3 формата, которые позволяют мне иметь столбцы. Я использовал excel, потому что его легко конвертировать, но я могу использовать только .csv,. tsv и .txt. Что вы рекомендуете?

3. я бы порекомендовал это: реальная база данных; Но да, вы можете использовать плоский файл, в случае чего файл CSV/TSV и, вероятно, было бы предпочтительнее, чтобы преуспеть в минимально от простоты основе, но вы должны думать о параллелизме и перекрывается доступ к файлам, возможно, с использованием Mutex или подобные, возможно, с использованием рабочего очереди

4. @MarcGravell Ну спасибо за вашу помощь. Я попробую это сделать

5. «Я использовал excel, потому что его легко конвертировать» означает, что вы согласны с другим промежуточным хранилищем данных, если это хранилище в конечном итоге может быть преобразовано в плоский текстовый файл. В этом случае, как предполагает @MarcGravell, предпочтительнее использовать базу данных. Взгляните на SQLite — он бесплатный, не требует установки, может быть создан на лету в виде одного файла и очень прост в работе с кодом C#. Если вам нужен вывод плоского файла, запросите его и экспортируйте содержимое.