Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复文件格式和扩展名don';在邮件中发送excel附件时不匹配警报_C#_Asp.net - Fatal编程技术网

C# 如何修复文件格式和扩展名don';在邮件中发送excel附件时不匹配警报

C# 如何修复文件格式和扩展名don';在邮件中发送excel附件时不匹配警报,c#,asp.net,C#,Asp.net,我已经使用xml代码创建了一个excel文件并通过电子邮件发送,但当我从电子邮件下载打开时,它显示“文件格式和'Repairorder.xls'的扩展名不匹配。该文件可能已损坏或不安全。除非您信任其源,否则不要打开它。是否仍要打开它?” 下面是我的代码 var attachments = new List<KeyValuePair<string, byte[]>>(); private static string ExcelHeader() {

我已经使用xml代码创建了一个excel文件并通过电子邮件发送,但当我从电子邮件下载打开时,它显示“文件格式和'Repairorder.xls'的扩展名不匹配。该文件可能已损坏或不安全。除非您信任其源,否则不要打开它。是否仍要打开它?”

下面是我的代码

  var attachments = new List<KeyValuePair<string, byte[]>>();
  private static string ExcelHeader()
    {
        // Excel header
        var sb = new StringBuilder();

        sb.Append(" <?xml version=\"1.0\"?>");
        sb.Append("<?mso-application progid=\"Excel.Sheet\"?>");
        sb.Append("<Workbook ");
        sb.Append(" xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"");
        sb.Append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\"");
        sb.Append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");
        sb.Append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"");
        sb.Append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">");
        return sb.ToString();
    }
    public static string GetStyles()
    {
        return @" <Styles>
                  <Style ss:ID=""Default"" ss:Name=""Normal"">
                   <Alignment ss:Vertical=""Bottom""/>
                   <Borders/>
                   <Font/>
                   <Interior/>
                   <NumberFormat/>
                   <Protection/>
                  </Style>
                  <Style ss:ID=""s27"" ss:Name=""Hyperlink"">
                   <Font ss:Color=""#0000FF"" ss:Underline=""Single""/>
                  </Style>
                  <Style ss:ID=""s24"">
                   <Font x:Family=""Swiss"" ss:Bold=""1""/>
                  </Style>
                  <Style ss:ID=""s25"">
                   <Font x:Family=""Swiss"" ss:Italic=""1""/>
                  </Style>
                  <Style ss:ID=""s26"">
                   <Alignment ss:Horizontal=""Center"" ss:Vertical=""Bottom""/>
                  </Style>
                 </Styles>";
    }



public static KeyValuePair<string, byte[]> CreateExcelSingleSheet(List<RepairOrderStatusObject> repairOrderStatusObjects, string componentName, int userId)
        {
        string xlsFileName = string.Format("RepairOrderStatus_dated_{0}_{1}.xls", componentName, DateTime.Now.ToString("MMMM_dd_yyyy")); // Excel file name.

        var strExcelXml = new StringBuilder();

        strExcelXml.Append(ExcelHeader());
        strExcelXml.Append(GetStyles());
        strExcelXml.Append(ConvertHTMLToExcelXML(ExcelWorkSheet(repairOrderStatusObjects, componentName, userId)));
        strExcelXml.Append("</Workbook>\n");

        var ms = new MemoryStream();
        var writer = new StreamWriter(ms, Encoding.Unicode);
        writer.Write(strExcelXml.ToString());
        writer.Flush();

        var buffer = new byte[ms.Length];
        ms.Position = 0;
        ms.Read(buffer, 0, buffer.Length);
        writer.Close();
        ms.Close();
        return new KeyValuePair<string, byte[]>(xlsFileName, buffer);
    }

private static string ExcelWorkSheet(List<RepairOrderStatusObject> repairOrderStatusObjects, string name, int userId)
    {
        var strExcelXml = new StringBuilder();

        strExcelXml.Append("<Worksheet ss:Name=\"Repair Order Status List\"><Table><tr>");
        List<ExportToExcelSetup> excelSetupList = ExportToExcelSetup.GetRepairOrderStatusUserFields(userId, repairOrderStatusObjects[0].ComponentType);

        var onlySelected = excelSetupList.Where(x => x.IsSelected).ToList();
        foreach (ExportToExcelSetup excelSetup in onlySelected)
        {
            strExcelXml.AppendFormat("<td>{0}</td>", excelSetup.Name);
        }

        strExcelXml.Append("</tr>");
        //var sortingColumn = ExportToExcelSetup.GetRepairOrderStatusUserFieldSortingColum(userId, FokkerComponentType.Schiphol);

        //var listsorted = repairOrderStatusObjects.OrderBy(q=> q.GetType().GetProperty(sortingColumn.Replace(" ","").Replace(".", "")).GetValue(q, null));
        //string dbSortingColumn = ExportToExcelSetup.GetRepairOrderStatusUserFieldSortingColum(MyFokkerFleetPrincipal.CurrentPrincipal.UserID, FokkerComponentType.Schiphol);

        //var sortingColumn = FindSortColumn(dbSortingColumn);
        //var listsorted = repairOrderStatusObjects.OrderBy(q=> q.GetType().GetProperty(sortingColumn).GetValue(q, null));

        foreach (RepairOrderStatusObject repairOrderStatusObject in repairOrderStatusObjects)
        {
            strExcelXml.Append("<tr>");
            foreach (ExportToExcelSetup excelSetup in onlySelected)
            {
                object value;
                try
                {
                    if (((ExportToExcelFieldsEnum) excelSetup.ID) == ExportToExcelFieldsEnum.Messages)
                    {
                        value = repairOrderStatusObject.ComponentType == FokkerComponentType.Schiphol
                                    ? SchipholRepairOrderStatus.ShopFindings(repairOrderStatusObject.ID)
                                    : repairOrderStatusObject.ShopFindingsAll;
                        value = Regex.Replace(value.ToString(), "<.*?>", " "); //Remove HTML-tags from the value
                    }
                    else
                    {
                        value = repairOrderStatusObject.GetType().GetProperty(
                            ((ExportToExcelFieldsEnum)excelSetup.ID).ToString()).GetValue(repairOrderStatusObject, null);
                    }

                }
                catch (Exception)
                {
                    value = "Unknown";
                }
                strExcelXml.AppendFormat("<td>{0}</td>", value == null?"": System.Web.HttpUtility.HtmlEncode(value.ToString()));
            }
            strExcelXml.Append("</tr>");
        }

        strExcelXml.Append("</Table></Worksheet>");

        return strExcelXml.ToString();
    }

    public static string ConvertHTMLToExcelXML(string strHtml)
    {
        // Just to replace TR with Row
        strHtml = strHtml.Replace("<tr>", "<Row ss:AutoFitHeight=\"1\">\n");
        strHtml = strHtml.Replace("</tr>", "</Row>\n");

        //replace the cell tags
        strHtml = strHtml.Replace("<td>", "<Cell><Data ss:Type=\"String\">");
        strHtml = strHtml.Replace("</td>", "</Data></Cell>\n");


        return strHtml;
    }

    private static Attachment ConvertXlsToAttachment(string fileName, byte[] fileContents)
    {
        string directory = Settings.TempPath;
        if (!Directory.Exists(directory)) Directory.CreateDirectory(directory);

        string xlsFilePath = Path.Combine(directory, fileName);

        File.WriteAllBytes(xlsFilePath, fileContents);

        var fs = new FileStream(xlsFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

        // Make a ContentType indicating that the file data
        // that is attached is of a type and is named.
        var ct = new ContentType
        {
            MediaType = "application/vnd.ms-excel",
            Name = Path.GetFileName(xlsFilePath)
        };

        // Attachment.
        return new Attachment(fs, ct);
    }

       private static Attachment ConvertXlsToAttachment(string fileName, byte[] fileContents)
    {
        string directory = Settings.TempPath;
        if (!Directory.Exists(directory)) Directory.CreateDirectory(directory);

        string xlsFilePath = Path.Combine(directory, fileName);

        File.WriteAllBytes(xlsFilePath, fileContents);

        var fs = new FileStream(xlsFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

        // Make a ContentType indicating that the file data
        // that is attached is of a type and is named.
        var ct = new ContentType
        {
            MediaType = "application/vnd.ms-excel",
            Name = Path.GetFileName(xlsFilePath)
        };

        // Attachment.
        return new Attachment(fs, ct);
    }
var attachments=新列表();
私有静态字符串ExcelHeader()
{
//Excel标题
var sb=新的StringBuilder();
某人加上(“”);
某人加上(“”);
某人加上(“”);
使某人返回字符串();
}
公共静态字符串GetStyles()
{
返回@”
";
}
public static KeyValuePair CreateExcelSingleSheet(列出repairOrderStatusObjects、字符串组件名称、int userId)
{
string xlsFileName=string.Format(“RepairOrderStatus_dated_{0}{u{1}.xls”),componentName,DateTime.Now.ToString(“MMMM_dd_yyyy”);//Excel文件名。
var strExcelXml=新的StringBuilder();
Append(ExcelHeader());
Append(GetStyles());
Append(ConvertHTMLToExcelXML(Excel工作表(repairOrderStatusObjects,componentName,userId));
strExcelXml.Append(“\n”);
var ms=新内存流();
var writer=newstreamwriter(ms,Encoding.Unicode);
Write(strExcelXml.ToString());
writer.Flush();
var buffer=新字节[ms.Length];
ms.Position=0;
ms.Read(缓冲区,0,缓冲区长度);
writer.Close();
Close女士();
返回新的KeyValuePair(xlsFileName,缓冲区);
}
专用静态字符串Excel工作表(列出repairOrderStatusObjects、字符串名称、int userId)
{
var strExcelXml=新的StringBuilder();
strExcelXml.Append(“”);
List excelSetupList=ExportToExcelSetup.GetRepairOrderStatusUserFields(用户ID,repairOrderStatusObjects[0].ComponentType);
var onlySelected=excelSetupList.Where(x=>x.IsSelected.ToList();
foreach(ExportToExcelSetup excelSetup仅在选定的范围内)
{
AppendFormat(“{0}”,excelSetup.Name);
}
strExcelXml.Append(“”);
//var sortingColumn=ExportToExcelSetup.GetRepairOrderStatusUserFieldSortingColum(userId,FokkerComponentType.Schiphol);
//var listsorted=repairOrderStatusObjects.OrderBy(q=>q.GetType().GetProperty(sortingColumn.Replace(“,”).Replace(“,”).GetValue(q,null));
//字符串dbSortingColumn=ExportToExcelSetup.GetRepairOrderStatusUserFieldSortingColum(myFokkerFoetPrincipal.CurrentPrincipal.UserID,FokkerComponentType.Schiphol);
//var sortingColumn=FindSortColumn(dbSortingColumn);
//var listsorted=repairOrderStatusObjects.OrderBy(q=>q.GetType().GetProperty(sortingColumn.GetValue(q,null));
foreach(RepairOrderStatusObject中的RepairOrderStatusObject RepairOrderStatusObject)
{
strExcelXml.Append(“”);
foreach(ExportToExcelSetup excelSetup仅在选定的范围内)
{
目标价值;
尝试
{
if(((ExportToExcelFieldsEnum)excelSetup.ID)==ExportToExcelFieldsEnum.Messages)
{
value=repairOrderStatusObject.ComponentType==FokkerComponentType.Schiphol
?SchipholRepairOrderStatus.ShopFindings(repairOrderStatusObject.ID)
:repairOrderStatusObject.ShopFindingsAll;
value=Regex.Replace(value.ToString(),“”,“”);//从值中删除HTML标记
}
其他的
{
值=repairOrderStatusObject.GetType().GetProperty(
((ExportToExcelFieldsEnum)excelSetup.ID).ToString()).GetValue(repairOrderStatusObject,null);
}
}
捕获(例外)
{
value=“未知”;
}
AppendFormat(“{0}”,value==null?”:System.Web.HttpUtility.HtmlEncode(value.ToString());
}
strExcelXml.Append(“”);
}
strExcelXml.Append(“”);
返回strExcelXml.ToString();
}
公共静态字符串ConvertHTMLToExcelXML(字符串strHtml)
{
//只是将TR替换为Row
strHtml=strHtml.Replace(“,”\n”);
strHtml=strHtml.Replace(“,”\n”);
//替换单元格标签
strHtml=strHtml.Replace(“,”);
strHtml=strHtml.Replace(“,”\n”);
返回strHtml;
}
私有静态附件ConvertXlsToAttachment(字符串文件名,字节[]文件内容)
{
string directory=Settings.TempPath;
如果(!Directory.Exists(Directory))Directory.CreateDirectory(Directory);
字符串xlsFilePath=Path.Combine(目录,文件名);
writealBytes(xlsFilePath,fileContents);
var fs=new FileStream(xlsFilePath,FileMode.Open,FileAccess.Read,FileShare.Read);
//创建一个ContentType,指示文件数据
//所附加的是一种类型,名为。
var ct=新的ContentType
{
MediaType=“应用程序/vnd.ms excel”,
Name=Path.GetFileName(xlsFilePath)
};
//附件。
返回新附件(fs、ct);
}
私有静态附件ConvertXlsToAttachment(字符串文件)