例如 0001,0002.......这样的数据导出到excel中,总是变成1,2............请问我该如何保存完整的数据.谢谢.急
我的导出方式采用了xml,xsl的方式导出的.
private bool ExportToXls(string saveFileName,DataSet ds)
{
if(File.Exists(saveFileName))
{
File.Delete(saveFileName);
}
string strPath = saveFileName.Substring(0,saveFileName.Length-4);
string strXml= strPath + ".xml";//xml文件
string strXsl= strPath + ".xsl";//xsl形式
string strXls= strPath+".xls";//excel文件 try
{
GetXmlFile(ds,strXml);
GetXSLFile(ds,strXsl); //Excel转换
XmlDocument doc = new XmlDocument();
doc.Load(strXml);
XslTransform xslt = new XslTransform();
xslt.Load(strXsl);
XmlElement root = doc.DocumentElement;
XPathNavigator nav = root.CreateNavigator();
XmlTextWriter writer = new XmlTextWriter(strXls, null);
xslt.Transform(nav, null, writer, null);
writer.Close();
File.Delete(strXml);
File.Delete(strXsl);
return true;
}
catch ( Exception ex)
{
throw(new Exception(ex.Message));
}
}
#endregion

解决方案 »

  1.   

    在要导出的项之前加一个单引号,你可以先在MS EXCEL里面试一下的。
      

  2.   

    楼上得兄弟,我传入ds前,已经在要处理得数据上加'了,可是在excel中还个'还是在单元格中,并没有变成单元格中左上角那个绿色得小三角. 什么问题?? 加上'空格,也不可以.什么问题??
      

  3.   

    You can give me your source code,let me look look,maybe I can give your good idea.My Email:[email protected]
      

  4.   

    代码如下:
    #region 根据数据集,生成替换后的xml文件
    /// <summary>
    /// 根据数据集,生成替换后的xml文件
    /// </summary>
    /// <param name="ds">数据集合</param>
    /// <param name="XmlFilePath">xml文件路径</param>
    private  void GetXmlFile(DataSet ds,string XmlFilePath)
    {
    string strXml = ds.GetXml();
    if(File.Exists(XmlFilePath))
    {
    File.Delete(XmlFilePath);
    }
    FileStream fs1 = File.Create(XmlFilePath);
    StreamWriter writer = new StreamWriter(fs1,System.Text.Encoding.GetEncoding("GB2312"));
    writer.Write(strXml);
    writer.Close();
    fs1.Close();
    }
    #endregion#region 创建转换格式文件(XSL)
    /// <summary>
    /// 创建转换格式文件(XSL)
    /// </summary>
    /// <param name="ds">要导出的数据集</param>
    /// <param name="XslPath">xsl文件存放路径</param>
    private  void GetXSLFile(DataSet ds,string XslPath)
    {
    string strColumn = "";
    string strRow = "";
    string dsName=ds.DataSetName;
    string tableName=ds.Tables[0].TableName;
    string header = dsName + "/" + tableName;
    foreach(DataColumn clm in ds.Tables[0].Columns)
    {
    //特殊字符 <,>,",*,%,(,),& 替换
    //*************************************************
    //*************************************************
    // 符号         xml下的值      excel中的值
    //  < --------  _x003C_  ------ &lt;
    //  > -------- _x003E_  ------ &gt;
    //  " --------  _x0022_  ------ &quot;
    //  * --------  _x002A_  ------ *
    //  % --------  _x0025_  ------ %
    //  & --------  _x0026_  ------ &amp;
    //  ( --------  _x0028_  ------ (
    //  ) --------  _x0029_  ------ )
    //  = --------  _x003D_  ------ = 
    //*************************************************
    //************************************************* string strClmName = clm.ColumnName;
    string strRowName = clm.ColumnName;
                    
    if(strClmName.IndexOf("&")!=-1)
    strClmName=strClmName.Replace("&","&amp;");
    if(strClmName.IndexOf("<")!=-1)
    strClmName=strClmName.Replace("<","&lt;");
    if(strClmName.IndexOf(">")!=-1)
    strClmName=strClmName.Replace(">","&gt;");
    if(strClmName.IndexOf("\"")!=-1)
    strClmName=strClmName.Replace("\"","&quot;");
                    
    if(strRowName.IndexOf("<")!=-1)
    strRowName=strRowName.Replace("<","_x003C_");
    if(strRowName.IndexOf(">")!=-1)
    strRowName=strRowName.Replace(">","_x003E_");
    if(strRowName.IndexOf("\"")!=-1)
    strRowName=strRowName.Replace("\"","_x0022_");
    if(strRowName.IndexOf("*")!=-1)
    strRowName=strRowName.Replace("*","_x002A_");
    if(strRowName.IndexOf("%")!=-1)
    strRowName=strRowName.Replace("%","_x0025_");
    if(strRowName.IndexOf("&")!=-1)
    strRowName=strRowName.Replace("&","_x0026_");
    if(strRowName.IndexOf("(")!=-1)
    strRowName=strRowName.Replace("(","_x0028_");
    if(strRowName.IndexOf(")")!=-1)
    strRowName=strRowName.Replace(")","_x0029_");
    if(strRowName.IndexOf("=")!=-1)
    strRowName=strRowName.Replace("=","_x003D_");
                     strColumn += "<th>" + strClmName +"</th>" + "\r\n"; 
    strRow += "<td>" + "<xsl:value-of select=" + "\"" + strRowName + "\"" +"/>" + "</td>" + "\r\n";
    }
    string str = @"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
                <xsl:template match=""/"">
                <html xmlns:o=""urn:schemas-microsoft-com:office:office"" xmlns:x=""urn:schemas-microsoft-com:office:excel"" xmlns=""http://www.w3.org/TR/REC-html40""> 
                <head> 
                <meta http-equiv=""Content-Type"" content=""text/html;charset=utf-8"" /> 
                <style> 
                .xl24{mso-style-parent:style0;mso-number-format:""\@"";text-align:right;} 
                </style> 
                <xml> 
                <x:ExcelWorkbook> 
                <x:ExcelWorksheets> 
                <x:ExcelWorksheet> 
                <x:Name>Sheet1</x:Name> 
                <x:WorksheetOptions> 
                        <x:ProtectContents>False</x:ProtectContents> 
                        <x:ProtectObjects>False</x:ProtectObjects> 
                        <x:ProtectScenarios>False</x:ProtectScenarios> 
                </x:WorksheetOptions> 
                </x:ExcelWorksheet> 
                </x:ExcelWorksheets> 
                </x:ExcelWorkbook> 
                </xml> 
                </head>  
                <body> ";
    str += "\r\n" +  @"<table border=""1"" cellpadding=""0"" cellspacing=""0""> 
                        <tr>" + "\r\n";
    str += strColumn;
    str += @" </tr> 
                        <xsl:for-each select="""+header+@""">
                        <tr>";
    str += "\r\n" + strRow;
    str += @"</tr> 
                        </xsl:for-each> 
                        </table> 
                        </body> 
                        </html> 
                          
                         
                        </xsl:template> 
                        </xsl:stylesheet> "; string path = XslPath;
    if(File.Exists(path))
    {
    File.Delete(path);
    }
    FileStream fs = File.Create(path);
    StreamWriter sw=new StreamWriter(fs);
    sw.Write(str);
    sw.Close();
    fs.Close();
    }
    #endregion
      

  5.   

    strRow += "<td>" + "<xsl:value-of select=" + "\"" + strRowName + "\"" +"/>" + "</td>" + "\r\n";
    这句话,是否可以将其定义为String型的, 
    或者进行一些格式化,将value-of 改变一下