「開発」タグアーカイブ

C#:ClosedXMLでデータ型を設定する方法は?

覚書
ClosedXML 0.90だと
.SetDataType(XLCellValues.Text);
は問題なし。
ClosedXML 0.91だと
エラーが発生するので、
以下のように変更
.SetDataType(XLDataType.Text);
取扱は
public enum XLDataType
ClosedXML.Excel のメンバー
なので、OKです。

尚且つ依存が発生します。
依存
FastMember.Signed (>= 1.1.0) 1.2 NG
ExcelNumberFormat (>= 1.0.3)   1.0.3 OK
DocumentFormat.OpenXml (>= 2.7.2)  2.8.1 OK
FastMember.Signed は限定のようです。
最新の 1.2を導入するとClosedXML 1.0.0.9を要求するようなので1.0.0.9を継承している1.1を導入したほうが良いです。

VS 2015
VS 2017

ソースの確認
https://github.com/ClosedXML/ClosedXML/tree/develop/ClosedXML/Excel/Cells

objectarx:2017 書き込む基本

わかりやすい。データベースの知識があれば迷わない。
// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.CurrentSpaceId,OpenMode.ForRead) as BlockTable;

// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId,OpenMode.ForWrite) as BlockTableRecord;
トランザクションをかけて、
入れ物ネストで
acBlkTblRec.AppendEntity(acPoly);
acTrans.AddNewlyCreatedDBObject(acPoly, true);
アペンドでコミットすればいいだけ。

objectarx:2017 Entityは使えた

こんな感じ
Entity acEnt = tr.GetObject(obj.ObjectId, OpenMode.ForWrite) as Entity;
if (acEnt != null)
{
switch (acEnt.GetType().ToString())
{
case “Autodesk.AutoCAD.DatabaseServices.Polyline”:
文字列でオブジェクトを分ける視覚的に有利でした
switch (objects[j].GetRXClass().Name)
{
case “AcDbLine”:
//ラインの種類
こんな方法も使える。