Рейтинг:
9
abdul subhan mohammed
Спасибо, Картик.
я дал ws.Protect("123"); но этот только не позволяет редактировать/вставлять новые значения.
Я хочу защитить весь файл excel. Всякий раз, когда пользователь открывает файл excel, он должен спросить пароль. Но в моем случае это не вопрос пароля.
Даже я попробовал wb.protect("123"); этот код также не запрашивает пароль.
Не могли бы вы пожалуйста помочь мне.
Еще раз спасибо.
Karthik_Mahalingam
опубликуйте код.
Karthik_Mahalingam
попробуйте использовать EPPlus[^]
string path =@"D:\Projects\CP\CP\bin\Debug\aa.xlsx";
FileInfo newFile = new FileInfo(path);
DataTable dt = new DataTable();
dt.Columns.Add("Column 1");
dt.Rows.Add("data1");
using (ExcelPackage package = new ExcelPackage(newFile))
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add("demo");
ws.Cells["A1"].LoadFromDataTable(dt, false);
package.Save("YourPassword");
}
abdul subhan mohammed
Большое вам спасибо.
Karthik_Mahalingam
работает?
abdul subhan mohammed
может ли u plz помочь мне сохранить этот файл в папке Загрузки пользователя.
Karthik_Mahalingam
это невозможно, приложение не будет иметь доступа к загрузке в указанную папку, это зависит от расположения загрузки браузера по умолчанию.
abdul subhan mohammed
как я могу это сделать, плз.
Karthik_Mahalingam
вы имеете в виду клиента (конечного пользователя? )
abdul subhan mohammed
охраняемых недействительными btnExport_Click(объект отправителя, EventArgs в электронной)
{
пробовать
{
XLWorkbook workBook = новый XLWorkbook();
ВАР листы = книга.Worksheets.Add("Шаблонные Вопросы");
var tQuestionList = поисковые запросы(1).Выберите(items => new
{
Код = items.ID,
Пункт программы.PerformanceCriteria.Исход.Модуль.Программа.Намин,
Модуль = элементы.PerformanceCriteria.Исход.Модуль.Намин,
Результат = предметы.PerformanceCriteria.Исход.Намин,
PerformanceCriteria = элементы.PerformanceCriteria.NameEN,
Язык = items.QuestionDetails.Выберите(q => q.QuestionLanguage.Имя).Метода firstordefault(),
QuestionText = items.QuestionDetails.Выберите(q => q.Details.Text.QuestionText).Метода firstordefault(),
IsActive = предметы.IsActive == true ? "Да" : "Нет",
}).Список();
рабочий лист.Ячейка(1, 1).Значение = "Шаблонный Вопрос";
рабочий лист.Ячейка(1, 1).AsRange().AddToNamed("Титры");
диапазон var = рабочие листы.Диапазон("A1:H1");
диапазон.Поглощать();
var rangeWithStrings = рабочие листы.Ячейка(2, 1).InsertData(tQuestionList);
// Подготовьте стиль для заголовков
var titlesStyle = рабочая книга.Стиль;
titlesStyle.Font.Жирный = истина;
titlesStyle.Font.FontColor = XLColor.Белый;
стиль титлов.Выравнивание.Горизонталь = XLAlignmentHorizontalValues.Центр;
titlesStyle.Заполнить.BackgroundColor = XLColor.Серый;
// Форматирование всех заголовков в одном кадре
рабочая тетрадь.NamedRanges.NamedRange("Титулы").Диапазоны.Style = titlesStyle;
рабочий лист.Столбцы().AdjustToContents();
//Защитите лист паролем
рабочая тетрадь.Защитить("123");
var protection = рабочие листы.Защитить("123");
защита.Insertrow = true;
защита.InsertColumns = истина;
если (рабочая тетрадь.IsPasswordProtected)
{
рабочая тетрадь.Сохранить Как(@"C:\\MyFiles\\TempQuestions.xlsx");
}
}
поймать (исключение бывший)
{
строка msg = ex.ToString();
бросать;
}
}
}
Karthik_Mahalingam
попробуйте приведенный выше код, протестирован, работает нормально.
Richard Deeming
NB: Вы не могу использование взаимодействия в ASP.NET! :)
Рекомендации по автоматизации работы офиса на стороне сервера[^]
В настоящее время корпорация Майкрософт не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого автоматического, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и/или взаимоблокировку при запуске Office в этой среде.
Karthik_Mahalingam
большую часть кейса я использую ClosedXML [^] для операций, связанных с excel, это уменьшает головную боль от уничтожения экземпляра excel в Диспетчере задач (при использовании interop).
но некоторые функциональные возможности не могут быть достигнуты ни в одной другой сторонней библиотеке. это будет возможно только через взаимодействие.
например, устанавливая разрешение пользователя для конкретного пользователя Windows AD с датой истечения срока действия, недавно я столкнулся с этой проблемой, и мне нужно использовать interop для этого, а не для другого GO.
так что взаимодействие нельзя игнорировать, все зависит от необходимости.
Да, я согласен с тем, что говорит Microsoft, но мы не можем сказать то же самое нашему клиенту :) :)
Member 14908890
Microsoft.Офис.Взаимодействие.Excel._Application app = новый Microsoft.Офис.Взаимодействие.Превосходить.Приложение();
Microsoft.Офис.Взаимодействие.Превосходить._Workbook workbook = приложение.Рабочая тетрадь.Добавить(Тип.Отсутствует);
Microsoft.Офис.Взаимодействие.Превосходить._Worksheet лист = нуль;
приложение.Видимое = истинное;
лист = книга.Простыни["Лист1"];
лист = книга.Параметру activesheet;
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
рабочий лист.Ячейки[1, i] = dataGridView1.столбцы[i - 1].HeaderText;
}
for (int i = 0; i < dataGridView1.Rows.Граф; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
рабочий лист.Ячейки[i + 2, j + 1] = dataGridView1.Rows[i].Ячейки[j].значение.Метод toString();
если (j >= 6)
{
рабочий лист.Клетки[i + 2, j + 1].Заблокирована = ложь;
}
}
}
рабочий лист.Защиты("", правда, правда, правда, правда, правда, правда);
имя строки = cmbclass.Текст + "_" + cmbsec.Текст + "_Marks of Term" + cboterm.Text;
рабочая тетрадь.Сохранить как("с:\\" + Имя + ".файлы XLSX", тип.Отсутствует, Тип.Отсутствует, Тип.Отсутствует, Тип.Отсутствует, Тип.Отсутствует, Майкрософт.Офис.Взаимодействие.Превосходить.XlSaveAsAccessMode.xlExclusive, тип.Отсутствует, Тип.Отсутствует, Тип.Отсутствует, Тип.Отсутствует);
приложение.Бросить();
Ящик для сообщений.Show("ваш файл успешно экспортирован на диск C", "готово", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);