#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#. Если вам нужен вывод плоского файла, запросите его и экспортируйте содержимое.