Member 13396929 Ответов: 1

Как написать в открытую электронную таблицу excel с помощью epplus?


У меня есть ASP.Net сайт веб-форм, где пользователь может записывать значения в электронную таблицу Excel. Я смог разрешить пользователям открывать копию электронной таблицы, сохраненной на сервере, и открывать ее в Excel (все пользователи имеют доступ к Excel). Я смог заставить пользователя писать в файл сразу же, как только он откроет его с помощью кнопки. Проблема в том, что пользователь не может записать файл после его открытия. Я добавил немного кода ниже, чтобы проиллюстрировать свою проблему.

Рабочий код:
protected void openExcel(object sender, EventArgs e)
    {
        string xlsxpath = Server.MapPath("~/new_takeoff.xlsx");
        fi = new FileInfo(Server.MapPath("~/new_takeoff.xlsx"));
        excelPackage = new ExcelPackage(fi);
        first = excelPackage.Workbook.Worksheets[1];
        ExcelRange chosen = first.SelectedRange;
        first.Cells["I54"].Value = 51;
        excelPackage.Save();

        System.Diagnostics.Process.Start(xlsxpath);
    }

Как вы можете видеть, я позаботился о написании и открытии в том же методе (обрабатывается экземпляром кнопки OnClick).

Эти отдельные методы (обрабатываемые отдельными кнопками) не работают:
protected void openExcel(object sender, EventArgs e)
{
    string xlsxpath = Server.MapPath("~/new_takeoff.xlsx");

    System.Diagnostics.Process.Start(xlsxpath);
}
protected void updateIT(object sender, EventArgs e)
{

    fi = new FileInfo(Server.MapPath("~/new_takeoff.xlsx"));
    excelPackage = new ExcelPackage(fi);
    first = excelPackage.Workbook.Worksheets[1];
    ExcelRange chosen = first.SelectedRange;
    first.Cells["I54"].Value = 51;
    excelPackage.Save();

}

Отладчик говорит мне, что файл не может быть доступен, потому что он используется другим процессом.

Кстати, мне нужно, чтобы файл был открыт, потому что пользователь должен выбрать, какую ячейку заполнить. Код C#, стоящий за ним, подбирает выбранный ExcelRange с помощью SelectedRange в библиотеке EPPlus.

Что я уже пробовал:

Я попробовал использовать Microsoft.Офис.Взаимодействие.Excel dll, но, конечно, это не работает для веб-сайта.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

В веб-приложении этого не происходит.

По-видимому, вам очень трудно понять отключенную природу браузеров и веб-серверов и то, какой код работает там, где он работает.

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

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

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

Если вам нужно настроить одну и ту же книгу Excel для каждого пользователя, вам придется сделать копию исходного файла Excel, присвоив копии уникальное имя. Вы можете открыть копию с помощью EPPlus, внести изменения и сохранить ее. Затем вы можете вернуть этот обновленный файл клиенту в качестве загрузки.

EPPlus можно использовать для создания книги Excel на сервере, но он не может обновлять лист с живыми данными на клиентских машинах. Ваш серверный код никогда не будет иметь доступа к чему-либо, работающему на клиенте, включая "открытую" копию книги Excel.


Member 13396929

Я понимаю, о чем вы говорите, но мне кажется, что я просто хожу по кругу. Я попытался встроить электронную таблицу, используя учебник здесь: https://support.office.com/en-us/article/share-it-embed-an-excel-workbook-on-your-web-page-or-blog-from-onedrive-804e1845-5662-487e-9b38-f96307144081. Он должен позволять пользователю добавлять значения во встроенный лист (правки не нуждаются в сохранении). Из того, что вы и другие сказали, я обнаружил, что код не сможет писать непосредственно на встроенный лист.

Должен ли я просто скопировать значение в буфер обмена пользователя и попросить его вставить его во встроенный лист?

Dave Kreskowiak

Для этого Вам придется использовать Office 365 и хранить свои книги в OneDrive. Вы также будете платить ежемесячную подписку, чтобы использовать его.

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


Member 13396929

Единственная причина, по которой я спрашиваю о записи значения в электронную таблицу excel, заключается в том, что мне нужно написать конкретное значение. Это конкретное значение вычисляется функцией Javascript в веб - приложении

Dave Kreskowiak

Javascript работает на стороне клиента, а не на сервере.

EPPlus работает на стороне сервера.

Google для "Javascript Excel library".