DioDocs for Excel
DioDocs for Excel
範囲にカスタムオブジェクトの設定
機能 > ワークシート > 範囲の操作 > 範囲にカスタムオブジェクトの設定

DioDocs for Excelでは、IRangeインタフェースのValueプロパティを使用して、カスタムオブジェクトまたはその1Dおよび2D配列を範囲に設定できます。ただし、カスタムオブジェクトはExcel入出力ではサポートされていません。

各操作の場合カスタムオブジェクトの動作


次のサンプルコードは、カスタムオブジェクトの2D配列を範囲に設定する方法を示します。

C#
コードのコピー
//新しいワークブックを作成します
var workbook = new GrapeCity.Documents.Excel.Workbook();

var activeSheet = workbook.ActiveSheet;
IRange a1 = activeSheet.Range["A1"];
var dict = new Dictionary<string, object>()
{
    {"TempData1", 1},
    {"TempData2", "Temp value 2"},
    {"TempData3", 3},
    {"TempData4", "Temp value 4"}
};
//一時データを範囲に設定します
a1.Value = dict;

//後でカスタムオブジェクトを表示します
var obj = (IReadOnlyDictionary<string, object>)a1.Value;
var row = 1;
foreach (var kv in obj)
{
    activeSheet.Range["B" + row].Value = kv.Key;
    activeSheet.Range["C" + row].Value = kv.Value;
    row += 1;
}

//調整
activeSheet.Columns.AutoFit();
activeSheet.Columns[0].Hidden = true;

//PDFファイルに保存します
workbook.Save("setcustomrangevalue.pdf");

次のサンプルコードは、JSONシリアル化の動作をオーバーライドする方法を示します。

C#
コードのコピー
 //JSONコンバータークラス 
class JsonNetConverter<T> : IJsonSerializer
{
    public static JsonNetConverter<T> Instance { get; } = new JsonNetConverter<T>();

    public object Deserialize(string json)
    {
        var jobj = JObject.Parse(json);
        if (jobj.TryGetValue("typeName", out JToken jtok) &&
            jtok is JValue jval &&
            jval.Type == JTokenType.String &&
            (string)jval.Value == typeof(T).Name)
        {
            return JsonConvert.DeserializeObject<T>(json);
        } 
        return null;
    }

    public string Serialize(object value)
    {
        var jObj = JObject.FromObject(value);
        jObj.Add("typeName", new JValue(typeof(T).Name));
        return jObj.ToString(Newtonsoft.Json.Formatting.None);
    }
} //クラスを終了します

public void overrideJSON()
{
    //使用法
    Workbook.ValueJsonSerializer = JsonNetConverter<ValueWithUnit>.Instance;
}