0

数値データを C# から Excel にエクスポートしたいと考えています。浮動小数点数では、ドット ('.') の代わりに小数点としてコンマ (',') が使用されます。C#でXMLコードを書いてExcelファイルをエクスポートしています。

データはコード側から適切にエクスポートされますが、Excel ファイルでは、データの種類が「数値」の場合、(',') が省略されます。英語で同じデータを生成すると、完全に生成されます。

例: number = 65,4 の場合、Excel ファイルでは 654 と表示されます。

サンプルコード : --xml コード

 <?xml version="1.0" encoding="UTF-8" ?>
<?mso-application progid="Excel.Sheet"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:html="http://www.w3.org/tr/rec-html40">
<ss:Worksheet ss:Name="test">
<ss:Table>
<ss:Row>
<ss:Cell ss:StyleID="s65"><ss:Data ss:Type="String">123</ss:Data></ss:Cell>
<ss:Cell ss:StyleID="s65"><ss:Data ss:Type="Number">64,3</ss:Data></ss:Cell>
<ss:Cell ss:StyleID="s65"><ss:Data ss:Type="Number">72,0</ss:Data></ss:Cell>
<ss:Cell ss:StyleID="s65"><ss:Data ss:Type="Number">26,0</ss:Data></ss:Cell>
<ss:Cell ss:StyleID="s65"><ss:Data ss:Type="Number">72,0</ss:Data></ss:Cell></ss:Row>
</ss:Table>
</ss:Worksheet></ss:Workbook>

c# コード --

    Dim excelXml As String = GetExcelXml(dsInput, filename)
    Response.Clear()
    Response.AppendHeader("Cache-Control", "cache, must-revalidate")
    Response.AppendHeader("Pragma", "public")
    Response.AppendHeader("Content-Type", "application/vnd.ms-excel")
    ' Response.ContentEncoding = System.Text.Encoding.GetEncoding(1252)
    Response.Charset = "iso-8859-1"
    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.AppendHeader("Content-disposition", "attachment; filename=" &   
         System.IO.Path.GetFileName(filename))
    Response.Write(excelXml)
    Response.Flush()
    Response.[End]()
4

1 に答える 1

0

GetExcelXmlXML ファイルを文字列に読み込むために呼び出した後のコードで、文字列を調べて、コンマがピリオドになるようにすべての数字を変換します。正規表現を使用して、1 行のコードで実行できるはずです。

たとえば、以下はすべての XML Number タイプをコンマの代わりにドットを使用するように変換するコード行です。excelXMLCorrected変換後、Excel ファイルに書き出します。この関数は、XML を生成する言語に関係なく機能します。

excelXMLCorrected = Regex.Replace(excelXml, 
   @"<ss:Data ss:Type=""Number"">([\d]+),([\d]{1})</ss:Data>", 
   "<ss:Data ss:Type=\"Number\">$1.$2</ss:Data>");
于 2012-04-19T00:17:03.930 に答える