VB .Net и объект Excel.Application, ошибка при сохранении файлов Excel
Код:
' 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
' 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
День добрый, Вы в файлы excel записываете данные из MSSQL или наоборот?
Данные из MSSQL записываю в excel файлы
Цитата: black_fox
Данные из MSSQL записываю в excel файлы
тогда попробуйте в имя файла "nameFile = "C:filesfile_" + id + ".xls" 'получаем имя открываемого файла"
добавить некий рандом, например, после id. И по-экспериментируйте.
Спасибо. Только думаю это не поможет, так как выяснилось, что ошибка контроля доступа возникает из-за того,что антивирус проверяет эти файлы во время работы. И иногда получается они пересекаются с сохранением файла в скрипте. При отключенном антивирусе всё работает. Только теперь не понятно как обойти эту проблему,чтобы не выключать антивирус.
Цитата: black_fox
Спасибо. Только думаю это не поможет, так как выяснилось, что ошибка контроля доступа возникает из-за того,что антивирус проверяет эти файлы во время работы. И иногда получается они пересекаются с сохранением файла в скрипте. При отключенном антивирусе всё работает. Только теперь не понятно как обойти эту проблему,чтобы не выключать антивирус.
вполне возможно, антивирус можно попросить не сканировать определенную директорию, и уже ваш скрипт научить складывать файлы в ту директорию.
Цитата: Kuzya
вполне возможно, антивирус можно попросить не сканировать определенную директорию, и уже ваш скрипт научить складывать файлы в ту директорию.
Спасибо. Добавили папку в доверенную зону в настройках антивируса, но это не помогло. Получается в один момент времени иногда два процесса Excel.exe и касперский читают один и тот же файл,и происходит ошибка. Добавить Excel в доверенную зону не можем,так как не можем доверять всем excel документам. Поэтому пока приходится выключать антивирус на время работы скрипта.
Обновили антивирус Касперского до 10 версии и ошибка контроля доступа пропала!Всем спасибо!