Как изменить код excel writer для редактируемого состояния и незащищенного представления с помощью C#
После того, как я экспортирую данные из datagridview в файл excel. И когда я открываю экспортированный файл excel. Его можно посмотреть, но на нем написано предупреждение .Защищенный вид..... включить редактирование.
Я хочу удалить это предупреждение, и пользователь позволит редактировать этот файл автоматически, когда я открою файл.
Что я уже пробовал:
/// <summary> /// Produces Excel file without using Excel /// </summary> using System.IO; using System.Text; public class ExcelWriter { private Stream stream; private BinaryWriter writer; private ushort[] clBegin = { 0x0809, 8, 0, 0x10, 0, 0 }; private ushort[] clEnd = { 0x0A, 00 }; private void WriteUshortArray(ushort[] value) { for (int i = 0; i < value.Length; i++) writer.Write(value[i]); } /// <summary> /// Initializes a new instance of the <see cref="ExcelWriter"/> class. /// </summary> /// <param name="stream">The stream.</param> public ExcelWriter(Stream stream) { this.stream = stream; writer = new BinaryWriter(stream); } /// <summary> /// Writes the text cell value. /// </summary> /// <param name="row">The row.</param> /// <param name="col">The col.</param> /// <param name="value">The string value.</param> public void WriteCell(int row, int col, string value) { ushort[] clData = { 0x0204, 0, 0, 0, 0, 0 }; int iLen = value.Length; byte[] plainText = Encoding.ASCII.GetBytes(value); clData[1] = (ushort)(8 + iLen); clData[2] = (ushort)row; clData[3] = (ushort)col; clData[5] = (ushort)iLen; WriteUshortArray(clData); writer.Write(plainText); } /// <summary> /// Writes the integer cell value. /// </summary> /// <param name="row">The row number.</param> /// <param name="col">The column number.</param> /// <param name="value">The value.</param> public void WriteCell(int row, int col, int value) { ushort[] clData = { 0x027E, 10, 0, 0, 0 }; clData[2] = (ushort)row; clData[3] = (ushort)col; WriteUshortArray(clData); int iValue = (value << 2) | 2; writer.Write(iValue); } /// <summary> /// Writes the double cell value. /// </summary> /// <param name="row">The row number.</param> /// <param name="col">The column number.</param> /// <param name="value">The value.</param> public void WriteCell(int row, int col, double value) { ushort[] clData = { 0x0203, 14, 0, 0, 0 }; clData[2] = (ushort)row; clData[3] = (ushort)col; WriteUshortArray(clData); writer.Write(value); } /// <summary> /// Writes the empty cell. /// </summary> /// <param name="row">The row number.</param> /// <param name="col">The column number.</param> public void WriteCell(int row, int col) { ushort[] clData = { 0x0201, 6, 0, 0, 0x17 }; clData[2] = (ushort)row; clData[3] = (ushort)col; WriteUshortArray(clData); } /// <summary> /// Must be called once for creating XLS file header /// </summary> public void BeginWrite() { WriteUshortArray(clBegin); } /// <summary> /// Ends the writing operation, but do not close the stream /// </summary> public void EndWrite() { WriteUshortArray(clEnd); writer.Flush(); } }
an0ther1
Режим защищенного просмотра-это комплект в Excel по данным пользователей, параметры Центра управления безопасностью.
По умолчанию файлы, соответствующие одному или нескольким из следующих критериев, будут открываться в режиме защищенного просмотра;
а) файлы, происходящие из интернета
б) перспективы вложения
c) файлы в потенциально опасных местах
Опция C также управляется настройками блока файлов в Excel 2010 и более поздних версиях
с уважением
Member 13264296
Таким образом, этот код выше не создает файл в состоянии защищенного просмотра.
Member 13264296
Я понял. Это по Excel, которые блокируют старые версии. Потому что этот код записывается в файл xls, а моя версия excel-2016. Последняя версия устанавливает блокировку старого файла excel. Я меняю настройки в настройках блока файлов и каждый раз пишу файл excel в своей программе, он не сохраняется так, как сейчас, как защищенный вид.