Вывод .NET Excel приводит к тому, что файл, который вы пытаетесь открыть, имеет формат diff, отличный от указанного ext - PullRequest
0 голосов
/ 27 февраля 2019

Я написал функцию для экспорта данных БД в файл Excel.Сначала я отформатировал данные в xml, а затем использовал Microsoft.Office.Interop.Excel.Application () для вывода данных в файл .xls.

Однако, когда я открываю вновь созданный файл xls,появляется следующее предупреждение: «Файл, который вы пытаетесь открыть, имеет формат, отличный от указанного расширением файла ......».enter image description here

Несмотря на то, что нажатие кнопки да открывает файл в обычном режиме, как мне изменить код, чтобы предупреждение не отображалось?

Вот код моегоfunction.

private void exportToExcel(string fileName,DataTable dt)
{
    StringBuilder dXML = new StringBuilder();
    dXML.AppendLine(@"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
                        <Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'
                            xmlns:o='urn:schemas-microsoft-com:office:office'
                            xmlns:x='urn:schemas-microsoft-com:office:excel'
                            xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet'
                            xmlns:html='http://www.w3.org/TR/REC-html40'>");
    dXML.AppendLine(@"<Styles>
                        <Style ss:ID='fontSetup'><Font ss:Size='8'/><Alignment ss:ShrinkToFit='1' ss:WrapText='1'/></Style>
                        <Style ss:ID='hyperlink' ss:Parent='fontSetup'> <Font ss:Size='8' ss:Color='#0000FF' ss:Underline='Single'/> </Style>
                        <Style ss:ID='header' ss:Parent='fontSetup'>
                            <Font ss:Color='#FFFFFF' ss:Bold='1'/>
                            <Interior ss:Color='#333399' ss:Pattern='Solid'/>
                        </Style>
                      </Styles>");
    dXML.AppendLine("<Worksheet ss:Name='Students'>");
    dXML.AppendLine("<Table>");
    dXML.AppendLine("<Column ss:Width='200'/>");
    dXML.AppendLine("<Column ss:Width='100'/>");

    dXML.AppendLine("<Row>");
    dXML.AppendLine("<Cell ss:StyleID='header'><Data ss:Type=\"String\">Student Name</Data></Cell>");
    dXML.AppendLine("<Cell ss:StyleID='header'><Data ss:Type=\"String\">Address 1</Data></Cell>");
    dXML.AppendLine("</Row>");
    foreach (DataRow row in dt.Rows)
    {
        dXML.AppendLine("<Row>");
        dXML.AppendLine("<Cell><Data ss:Type=\"String\">" + IntranetUtility.TrimNull(row["std_name"]) + "</Data></Cell>");
    oXML.AppendLine("<Cell><Data ss:Type=\"String\">" + IntranetUtility.TrimNull(row["addr"]) + "</Data></Cell>");
        dXML.AppendLine("</Row>");
    }
    dXML.AppendLine("</Table></Worksheet></Workbook>");
    var tempFile = Path.GetTempFileName();
    using (StreamWriter writer = new StreamWriter(tempFile, false))
    {
        writer.Write(dXML);
        writer.Close();
    }

    // output xml as xls
    using (var excelApp = new Microsoft.Office.Interop.Excel.Application().WithComCleanup())
    {
        object missingVal = System.Reflection.Missing.Value;
        excelApp.Resource.Visible = false;
        excelApp.Resource.DisplayAlerts = false;
        excelApp.Resource.AlertBeforeOverwriting = false;
        using (var excelAppWorkbooks = excelApp.Resource.Workbooks.WithComCleanup())
        {
            using (var excelWB = excelAppWorkbooks.Resource.Open(tempFile, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal, missingVal).WithComCleanup())
            {
                excelWB.Resource.SaveCopyAs(fileName);
                excelWB.Resource.Close(missingVal, missingVal, missingVal);
                //excelWB.Resource.Close(true);
            }
        }
        excelApp.Resource.Quit();
    }
    File.Delete(tempFile);

}

Скажем, я вызываю функцию следующим образом: exportToExcel ("C: \ Folder \ test.xls", dataset.Tables [0])

Большое спасибо.

...