Member 13264296 Ответов: 0

Как изменить код 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 в своей программе, он не сохраняется так, как сейчас, как защищенный вид.

0 Ответов