2

このMSDN の記事では、MS は SSRS 2005 からの csv タイプのエクスポートでコンマ以外の区切り文字を指定する方法を説明していますが、リテラルのタブ文字は構成ファイル パーサーによって削除されており、MS が回避策を提供しているようには見えません。Microsoft Connect
のこのエントリは、これを確認しているようです。
SSRS 2005 からタブ区切りファイルをエクスポートする方法を開発した人はいますか?
それとも、オープンソースのカスタム レンダラーを開発して仕事を終わらせたのでしょうか?

注: URL アクセスを介して手動で追加するという話を聞いたことがあり&rc:FieldDelimiter=%09ますが、それは私のユーザーにとって受け入れられる回避策ではなく、いずれにしても機能しないようです。

4

4 に答える 4

3

誰かがそれを必要とする場合、これは私にとって非常にうまく機能しています。

<Extension Name="Tabs" Type="Microsoft.ReportingServices.Rendering.DataRenderer.CsvReport,Microsoft.ReportingServices.DataRendering">
  <OverrideNames>
    <Name Language="en-US">Tab-delimited</Name>
  </OverrideNames>
  <Configuration>
    <DeviceInfo>
      <OutputFormat>TXT</OutputFormat>
      <Encoding>ASCII</Encoding>
      <FieldDelimiter>&#9;</FieldDelimiter>
      <!-- or as this -->
      <!-- <FieldDelimiter xml:space="preserve">[TAB]</FieldDelimiter> -->
      <FileExtension>txt</FileExtension>
    </DeviceInfo>
  </Configuration>
</Extension>
于 2009-08-20T19:57:26.787 に答える
1

selectクエリを使用してデータをフォーマットし、BCPを使用してデータをファイルに抽出しました。私の場合、すべてをストアドプロシージャにカプセル化し、SQLエージェントを使用して特定の時間にファイルをドロップするようにスケジュールしました。基本的なコーディングは次のようになります。

use tempdb
go
create view vw_bcpMasterSysobjects
as
   select
      name = '"' + name + '"' ,
      crdate = '"' + convert(varchar(8), crdate, 112) + '"' ,
      crtime = '"' + convert(varchar(8), crdate, 108) + '"'
   from master..sysobjects
go
declare @sql varchar(8000)
select @sql = 'bcp "select * from tempdb..vw_bcpMasterSysobjects
                     order by crdate desc, crtime desc"
               queryout c:\bcp\sysobjects.txt -c -t, -T -S'
                                             + @@servername
exec master..xp_cmdshell @sql

優れた投稿createing-csv-files-using-bcp-and-stored-proceduresをご覧ください。

于 2008-09-23T23:21:27.027 に答える
1

私の現在の回避策は、次のようなカスタム CSV 拡張機能を追加することです。

<Extension Name="Tabs" Type="Microsoft.ReportingServices.Rendering.CsvRenderer.CsvReport,Microsoft.ReportingServices.CsvRendering">
    <OverrideNames>
        <Name Language="en-US">Tab-delimited (requires patch)</Name>
    </OverrideNames>
    <Configuration>
        <DeviceInfo>
            <Encoding>ASCII</Encoding>
            <FieldDelimiter>REPLACE_WITH_TAB</FieldDelimiter>
            <Extension>txt</Extension>
        </DeviceInfo>
    </Configuration>
</Extension>

...テキスト「REPLACE_WITH_TAB」をフィールド区切り文字として使用していることがわかります。次に、プラットフォームに依存しない単純なPerl スクリプトを使用して、sed のような修正を実行します。

# all .txt files in the working directory
@files = <*.txt>;

foreach $file (@files) {
    $old = $file;
    $new = "$file.temp";

    open OLD, "<", $old or die $!;
    open NEW, ">", $new or die $!;

    while (my $line = <OLD>) {

        # SSRS 2005 SP2 can't output tab-delimited files
        $line =~ s/REPLACE_WITH_TAB/\t/g;

        print NEW $line;
    }

    close OLD or die $!;
    close NEW or die $!;

    rename($old, "$old.orig");
    rename($new, $old);
}

これは間違いなくハッキングですが、かなり非侵襲的な方法で仕事を成し遂げます。必要なものは次のとおりです。

  • ユーザーのマシンにインストールされた Perl
  • .pl スクリプトを .txt ファイルのディレクトリにドラッグするユーザーの機能
  • .pl スクリプトをダブルクリックするユーザーの機能
于 2008-09-26T16:27:35.940 に答える
0

ばかさんと呼んでください。しかし、ストアド プロシージャまたは SQL ステートメントから XML を返す方が簡単ではないでしょうか。XSLT から CSV への変換は簡単です。

または、ADO.NET を使用してデータを取得し、出力ストリームをクリアし、MIME タイプを text/csv に設定し、CSV を書き込む、同様に単純な ASP.NET ページを作成することもできます。

おっと、カンマ以外区切り文字が必要ですね。ただし、上記の解決策は両方とも適用できます。ASP の方法を使用する場合は、選択した区切り文字を選択できるパラメーター ページを使用できます。

于 2008-09-24T03:23:11.237 に答える