Зависимые ячейки Excel не обновляются автоматически - PullRequest
1 голос
/ 07 февраля 2012

Я написал этот метод (почти аналогичный в другом посте)

public void update(string fileName, string sheetName)
{
    string connString = connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(fileName) + ";Extended Properties='Excel 12.0;HDR=NO'";

    try
    {
        OleDbConnection oledbConn = new OleDbConnection(connString);

        oledbConn.Open();

        OleDbCommand cmd = new OleDbCommand("UPDATE ["+sheetName+"$B5:B5] SET F1=17", oledbConn);

        cmd.ExecuteNonQuery();

        oledbConn.Close();
    }
    catch(Exception ex)
    {
        Debug.Write("Error: " + ex.Message);
    }
}

и вызов этого метода:

update("test.xls", "test");

Пока все работает нормально, потому что когда я открываю файл test.xls, B5 обновляется до 17. Однако, если есть ячейка: B1 зависит от B5: B1=B5*5, то B1 не будет обновляться автоматически. Мне нужно вручную открыть файл Excel и сохранить его с предупреждением, чтобы обновить B1. Как я могу сделать это программно?

1 Ответ

4 голосов
/ 07 февраля 2012

Я не думаю, что вы можете зависеть от обновления вычисляемых столбцов в Excel при использовании драйвера ACE для взаимодействия с рабочим листом Excel.Когда вы используете OLEDB для работы с рабочим листом книги, он обрабатывает рабочий лист как структуру базы данных.

Я думаю, вы можете использовать OpenXML для чтения / записи в файл.В StackOverflow есть несколько потоков с дополнительной информацией об использовании OpenXML, которые стоит проверить.

Эта публикация показывает, как именно выполнить пересчет ячейки с использованием OpenXML.

...