4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
1

Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False

28.11.2018, 12:35. Показов 1478. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Коллеги, доброго времени суток.

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

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
 
        Dim strPozName As String ' Название позиции товара из калькуляции
        Dim strPosUnit As String ' единица измерения товара из калькуляции
        Dim intPosQuantity As Integer ' количество товара из калькуляции
        Dim dblPosPrice As Double ' цена позиции из калькуляции
        Dim strPosProduce As String ' производитель позиции из калькуляции
        Dim intSnabRowIndex As Integer = 12 ' переменная с номером строки файла снабжения
        Me.strSnabFileNameShort = "Заявка в снабжение " & Me.strProjectName & ".xlsx" ' Кратное название файла заявки в снабжение
        Me.strSnabFileNameFull = Me.strProjectFolder & "\Заявка в снабжение " & Me.strProjectName & ".xlsx" ' Полное название файла заявки в снабжение.
        If Dir(strSnabFileNameFull) <> "" Then ' Если файл заявки существует, то
            MsgBox("Файл 'Заявка в снабжение " & strSnabFileNameShort & " уже сформирован. Формирование новой заявки в снабжение невозможно.", vbCritical, "Ошибка формирования файла") ' предупреждение о наличие файла
            Exit Sub ' и выход из системы
        End If
 
        Me.oExcelCalc.Visible = False
        Me.oExcelCalc.Workbooks.Add()
        Me.oExcelCalc.ActiveWorkbook.SaveAs(Filename:=Me.strSnabFileNameFull)
        With Me.oExcelCalc
            .Sheets("Лист1").Name = "List"
            .Range("B11").Value = "Наименование позиции"
            .Range("C11").Value = "Поставщик"
            .Range("D11").Value = "Ед.Изм."
            .Range("E11").Value = "Кол-во"
            .Range("F11").Value = "Цена, руб. без НДС"
            .Columns("A:A").ColumnWidth = 0
            .Columns("B:B").ColumnWidth = 89
            .Columns("C:C").ColumnWidth = 43
            .Columns("D:D").ColumnWidth = 12
            .Columns("E:E").ColumnWidth = 12
            .Columns("F:F").ColumnWidth = 26
            .Range("A11:F11").Select()
            .Selection.HorizontalAlignment = -4108
        End With
 
        oExcelCalc.Application.DisplayAlerts = False ' выключение системных предупреждений
        For intRowIndex = 0 To Me.DataGridView1.Rows.Count - 1 ' Формирование цикла формирования таблицы по количеству файлов
            If Me.DataGridView1.Item(25, intRowIndex).Value <> "Устаревшая версия калькуляционной карты" Then
                strExportCalcNameFull = Me.DataGridView1.Item(0, intRowIndex).Value ' присвоение переменной названия файла
                strExportCalcNameShort = (Strings.Right(strExportCalcNameFull, Len(strExportCalcNameFull) - InStrRev(strExportCalcNameFull, "\"))) ' Краткое имя файла калькуляции (без пути)
                oExcelCalc.Workbooks.Open(strExportCalcNameFull) ' открытие файла калькуляции
                For intCalcRowIndex1 = 36 To 55 ' Цикл формирования таблицы запроса по материалалм из калькуляции
                    oExcelCalc.Windows(strExportCalcNameShort).Activate() ' активация файла калькуляции
                    If ((oExcelCalc.Range("D" & intCalcRowIndex1).Value <> "") And ((oExcelCalc.Range("AI" & intCalcRowIndex1).Value = 0) Or (oExcelCalc.Range("AI" & intCalcRowIndex1).Value = Nothing))) = True Then
                        strPozName = oExcelCalc.Range("D" & intCalcRowIndex1).Value ' присвоение переменной названия позиции
                        strPosProduce = oExcelCalc.Range("V" & intCalcRowIndex1).Value ' присвоение переменной названи производителя
                        strPosUnit = oExcelCalc.Range("AD" & intCalcRowIndex1).Value ' присвоение переменной единиц измерения
                        intPosQuantity = oExcelCalc.Range("AF" & intCalcRowIndex1).Value ' присвоение переменной количества
                        dblPosPrice = oExcelCalc.Range("AI" & intCalcRowIndex1).Value ' присвоение переменной цены
                        oExcelCalc.Windows(strSnabFileNameShort).Activate()
                        oExcelCalc.Range("A" & intSnabRowIndex).Value = strExportCalcNameShort
                        oExcelCalc.Range("B" & intSnabRowIndex).Value = strPozName
                        oExcelCalc.Range("C" & intSnabRowIndex).Value = strPosProduce
                        oExcelCalc.Range("D" & intSnabRowIndex).Value = strPosUnit
                        oExcelCalc.Range("E" & intSnabRowIndex).Value = intPosQuantity
                        oExcelCalc.Range("F" & intSnabRowIndex).Value = dblPosPrice
                        intSnabRowIndex = intSnabRowIndex + 1
                    End If
                    FormProgress.ProgressBar1.Value = FormProgress.ProgressBar1.Value + 1
                Next intCalcRowIndex1
              
                oExcelCalc.Windows(strExportCalcNameShort).Activate()
                oExcelCalc.ActiveWorkbook.Close()
            Else
                FormProgress.ProgressBar1.Value = FormProgress.ProgressBar1.Value + 76
            End If
        Next intRowIndex
        oExcelCalc.Application.DisplayAlerts = True ' Включение системных предупреждений
        oExcelCalc.Application.Quit() ' закрытие приложения Excel
    End Sub
 
 
    End Sub


На 51 строке выдается предупреждение о том, что я пытаюсь записать на защищенный лист. Никак не могу понять, в чем дело? Должно же работать.

P.S. если убрать строку Me.oExcelCalc.Visible = False или установить Me.oExcelCalc.Visible = True , то все работает.
Миниатюры
Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2018, 12:35
Ответы с готовыми решениями:

Microsoft.Office.Interop.Excel.Application процессы Excel в памяти компьютера
Добрый день, коллеги! Программа работает с файлами Excel. В каждой процедуре я указываю, что...

Работа с Excel через Microsoft.Office.Interop.Excel
Необходимо реализовать програмку взаимодействующую с Excel в режиме реального времени. Проблем...

"Application" в пространстве имен "Microsoft.Office.Interop.Excel" является неоднозначным
Собственно, подключил библиотеку Microsoft Excel 11 object library, прописал Imports...

Работа с Microsoft.Office.Interop.Excel
Всем доброго времени суток. Возникает проблема работы с библиотекой Microsoft.Office.Interop.Excel...

1
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
28.11.2018, 14:20  [ТС] 2
Дополнение. Может кто подскажет о причине такого явления.

Когда установлена видимость ( Me.oExcelCalc.Visible = True ) все работает как часы.
Когда установлено ( Me.oExcelCalc.Visible = False ) . тут начинаются проблемы. Выдает сообщение о том, что я пытаюсь записать на защищенную ячейку.
У меня действительно есть защищенные паролем ячейки, но в другом файле (И в этот файл я ничего не записываю). Не понятно почему, но когда установлена невидимость, это как то влияет. В коде программы сделал снятие защиты с листа, работа, потом постановка защиты, все заработало.
Не пойму связь.
0
28.11.2018, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2018, 14:20
Помогаю со студенческими работами здесь

Microsoft.Office.Interop.Excel.Worksheet - переключение между листами
Споткнулся на пустом месте. Начал работать с многостраничным файлом. При переключении между...

Работа с документами Excel без Microsoft.Office.Interop.Excel
всем добрый день все дело в том что для своих программ я использую БД Excel но! однако не все...

Interop.Microsoft.Office.Interop.Excel, как исправить ошибку несовместимости версий
Error 1 Assembly 'Interop.Microsoft.Office.Interop.Excel, Version=1.7.0.0, Culture=neutral,...

Невозможно загрузить файл или сборку "Microsoft.Office.Interop.Excel" при переносе приложения на другой ПК
есть приложение Windows Form. На форме есть button, при нажатии на который некоторые данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru