abdul subhan mohammed Ответов: 2

Экспорт защищенного паролем файла excel из gridview в ASP.NET с#


Дорогие Все,

Я хочу экспортировать GridView/Repeater в защищенный паролем файл excel.

В настоящее время я занимаюсь экспортом без пароля.

Что я уже пробовал:

Response.ClearContent();
Response.AddHeader("content-disposition", "attachment;filename=CandidateList.xls");
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
Response.ContentEncoding = Encoding.Unicode;
Response.BinaryWrite(Encoding.Unicode.GetPreamble());

using (StringWriter sw = new StringWriter())
{
    using (HtmlTextWriter htw = new HtmlTextWriter(sw))
    {
        GridView grid = new GridView();
        grid.DataSource = exportcandidateList;
        grid.DataBind();
        string headerTable = @"<Table><tr><td colspan='12'><center>Candidates - " + ddlCenter.SelectedItem.ToString().ToUpper() + " </center></td></tr></Table>";
        Response.Write(headerTable);
        grid.RenderControl(htw);
        Response.Write(sw.ToString());
    }
}

Response.End();


Мы можем экспортировать защищенного паролем в Excel с использованием отчетов Crystal (ASP.NET в C#)?


Может ли кто-нибудь помочь мне, как я могу добавить защиту паролем в файл excel при экспорте.


Спасибо

Mehdi Gholam

Вы не экспортируете файл в формате Excel, а экспортируете в текстовом формате, который не поддерживает пароли файлов.

abdul subhan mohammed

- Да, я знаю. Знаете ли вы, как я могу экспортировать данные в защищенный паролем excel?

2 Ответов

Рейтинг:
9

Karthik_Mahalingam

Мы можем экспортировать защищенного паролем в Excel с использованием отчетов Crystal (ASP.NET в C#)?

Нет

Вам придется использовать Взаимодействие [^] или любая сторонняя библиотека для защиты рабочей книги.
я бы предложил GitHub - ClosedXML/ClosedXML: [^] чтобы настроить excel так, как вы хотели.

обратитесь к ним, чтобы применить пароль к файлу, а затем вы можете экспортировать его.
. Создайте защищенный паролем файл excel с помощью библиотеки Closedxml [^]
Защита Листа · ClosedXML/ClosedXML Wiki · GitHub[^]


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.Информация);

Рейтинг:
1

Mehdi Gholam

Используйте для этой цели библиотеку, например : Галерея NuGet | EPPlus 4.1.1[^]


Member 13844328

можем ли мы защитить файл excel с помощью пароля от gridview ??

Mehdi Gholam

Да, ознакомьтесь с библиотечной документацией.