Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

VB .Net и объект Excel.Application, ошибка при сохранении файлов Excel

87K
04 марта 2015 года
black_fox
5 / / 04.03.2015
Здравствуйте! Помогите,пожалуйста, разобраться со следующей проблемой. Был разработан скрипт на VB .Net, который должен записать некоторые данные,полученные из sql, в множество файлов Excel.При небольшом количестве файлов (до 200) скрипт обычно отрабатывает, поэтому проблема выяснилась не сразу. Мне нужно обработать несколько тысяч файлов. Во время выполнения скрипта возникает ошибка конфликта доступа и появляется диалоговое окно с предложением сохранить файл с временным именем. В этот момент к этим документам никто не обращается, кроме программы. Создается ощущение, что работа с объектом Excel.Application, происходит либо асинхронно либо еще что-то и получается какой-то бардак. Буду благодарна за любую помощь!
Код:
' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic
' The ScriptMain class is the entry point of the Script Task.

Option Strict Off
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.office.interop.excel
Imports Microsoft.office.interop

Public Class ScriptMain
    Public Sub Main()

        Dim oExcel As Excel.Application
        Dim oBook As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim row As DataRow
        Dim column As DataColumn

        Dim id As String
        Dim name As String
        Dim nameFile As String
       
        Dim oleDA As New OleDbDataAdapter
        Dim dt As New System.Data.DataTable
        oleDA.Fill(dt, Dts.Variables("infoSet").Value) 'массив данных из sql

        oExcel = CreateObject("Excel.Application")
        oExcel.Visible = False
        oExcel.DisplayAlerts = 0

        For Each row In dt.Rows
            id = ""
            name = ""
            id = row(0).ToString
            name = row(1).ToString
            nameFile = ""

            nameFile = "C:filesfile_" + id + ".xls" 'получаем имя открываемого файла
            oBook = oExcel.Workbooks.Open(nameFile)

            oSheet = oBook.Worksheets.Item(1)

            oSheet.PageSetup.RightFooter = "Идентификатор " + id + " " + name

            oBook.SaveAs(nameFile, 56)

            System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
            oSheet = Nothing
            oBook.Close()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
            oBook = Nothing

        Next
        oExcel.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
        oExcel = Nothing
        Dts.TaskResult = Dts.Results.Success

    End Sub

End Class
1.8K
04 марта 2015 года
Kuzya
184 / / 19.03.2008
День добрый, Вы в файлы excel записываете данные из MSSQL или наоборот?
87K
04 марта 2015 года
black_fox
5 / / 04.03.2015
Данные из MSSQL записываю в excel файлы
1.8K
04 марта 2015 года
Kuzya
184 / / 19.03.2008
Цитата: black_fox
Данные из MSSQL записываю в excel файлы

тогда попробуйте в имя файла "nameFile = "C:filesfile_" + id + ".xls" 'получаем имя открываемого файла"
добавить некий рандом, например, после id. И по-экспериментируйте.

87K
05 марта 2015 года
black_fox
5 / / 04.03.2015
Спасибо. Только думаю это не поможет, так как выяснилось, что ошибка контроля доступа возникает из-за того,что антивирус проверяет эти файлы во время работы. И иногда получается они пересекаются с сохранением файла в скрипте. При отключенном антивирусе всё работает. Только теперь не понятно как обойти эту проблему,чтобы не выключать антивирус.
1.8K
05 марта 2015 года
Kuzya
184 / / 19.03.2008
Цитата: black_fox
Спасибо. Только думаю это не поможет, так как выяснилось, что ошибка контроля доступа возникает из-за того,что антивирус проверяет эти файлы во время работы. И иногда получается они пересекаются с сохранением файла в скрипте. При отключенном антивирусе всё работает. Только теперь не понятно как обойти эту проблему,чтобы не выключать антивирус.

вполне возможно, антивирус можно попросить не сканировать определенную директорию, и уже ваш скрипт научить складывать файлы в ту директорию.

87K
13 марта 2015 года
black_fox
5 / / 04.03.2015
Цитата: Kuzya


вполне возможно, антивирус можно попросить не сканировать определенную директорию, и уже ваш скрипт научить складывать файлы в ту директорию.

Спасибо. Добавили папку в доверенную зону в настройках антивируса, но это не помогло. Получается в один момент времени иногда два процесса Excel.exe и касперский читают один и тот же файл,и происходит ошибка. Добавить Excel в доверенную зону не можем,так как не можем доверять всем excel документам. Поэтому пока приходится выключать антивирус на время работы скрипта.

87K
17 марта 2015 года
black_fox
5 / / 04.03.2015
Обновили антивирус Касперского до 10 версии и ошибка контроля доступа пропала!Всем спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог