-1

スピードシートからデータを読み取り、メモ帳のcsvファイルに移動します。c#で入力してから、スピードシートに戻ります。ただし、スプレッドシートでは、一部のセルが空です(空とは、値が= ""であり、スペースとスペースの数だけが異なる場合があります)。メモ帳に移動してスプレッドシートに戻ると、これらの値が失われる可能性があります。これらのセルを区別して、セルがまだ存在するように引用符を付ける方法はありますか?

この空のセルのほとんどがファイルタイプdata_stringまたはboolを持っていることがわかりました。このコードは、すべてのdata_stringで機能します。

if (fileType == "data_string")
{
    string see = cell.getFormula().ToString();
    sw.Write("'" + see + "' ");
}
else
{

    string see = cell.getFormula().ToString();
    sw.Write(see + " ");
}

ただし、すべてのブールデータを引用符で囲む必要はありません。空のデータだけを使用します。これまでのところ、

if (fileType == "bool")
{

    if (cell.getFormula().Empty)
    {
        sw.Write("'" + cell.getFormula().ToString() + "' ");
    }
}

ただし、実際にはセルが空ではないため、これは機能しません。これを回避する別の方法はありますか?

4

4 に答える 4

1

セルの長さが0より長い(したがって空ではない)かどうかを確認し、そうでない場合(つまり、空である)、アポストロフィを追加します。私はc#を初めて使用するので、これが機能するかどうかはわかりません

if (fileType == "bool")
{
    if (!cell.getFormula().length > 0) // If the cell is not longer than 0 characters
    {
        string see = cell.getFormula().ToString();
        sw.Write("'" + see + "' ");
    }
    else 
    {
        string see = cell.getFormula().ToString();
        sw.Write(see + " ");
    }
于 2012-07-31T14:23:01.323 に答える
1

次に、それらがブール値であるという事実を無視し、次のようにフィールドが空であるかどうかを確認します。

 if ( cell.getFormula().StartsWith(" "))
                    {
                        {
                            for (int i = 0; i < cell.getFormula().Length; i++)
                            {
                                if (cell.getFormula()[i] == ' ')
                                {

                                    emptyBool.Add(" ");

                                }
                            }
                            string emptyBoolString = string.Join(" ", emptyBool.ToArray());
于 2012-08-03T14:32:30.897 に答える
0

インポートとエクスポートで区切られた関数を手動でコーディングすることには危険が伴います。代わりに、これらの状況を支援するために特別に開発されたFileHelpersのようなサードパーティのライブラリを使用することをお勧めします。

FileHelpersのようなライブラリを使用すると、モデルを特定の属性で装飾してから、ライブラリを使用して手間のかかる作業を行うことができます。これが彼らのサイトからの例です:-

モデル

[DelimitedRecord(",")]
public class Customer
{
    public int CustId;

    public string Name;

    public decimal Balance;

    [FieldConverter(ConverterKind.Date, "dd-MM-yyyy")]
    public DateTime AddedDate;

}

パーサークラス

var engine = new FileHelperEngine(typeof(Customer));

// To Read Use:
Customer[] res = engine.ReadFile("FileIn.txt") as Customer[];

// To Write Use:
engine.WriteFile("FileOut.txt", res);

注:同様の仕事をする他のライブラリがありますが、私はFileHelpersのみを使用しており、がっかりしていません。

于 2012-07-31T14:05:51.570 に答える
0
 if you are using **bool**, then its a **bit** so it can't be empty,
 it is either true or false or you can use null
于 2012-07-31T14:07:16.010 に答える