epplusを使用してexcel 2010ファイル内のシート内の図形または画像のx座標とy座標をピクセル単位で取得できた?EPPlusを使用してExcelファイル(xlsx)内のピクセルで形状/画像座標を取得する方法
0
A
答えて
0
私は最終的に内部XMLデータを使用して解決策を見つけ、Excelがequal to 1/9525 pixel
あるEMU
と呼ばれるメジャーの単位を使用しているようです。ソリューションは
public static Rectangle GetDimensions(string shapeName, ExcelWorksheet sheet)
{
const int EMU = 9525;
var shapeBaseNodexPath = string.Format("//*[@name='{0}']", shapeName);
//get node that contains name of the shape
var shapeNameNode = sheet.Drawings.DrawingXml.SelectSingleNode(shapeBaseNode);
if (shapeNameNode == null)
throw new ArgumentException("Invalid shape name");
//go 2 levels up and select shape properties node <a:xfrm> node
var propertiesNode = shapeNameNode
.SelectSingleNode("../../*[local-name() = 'spPr']/*[local-name() = 'xfrm']");
if (propertiesNode == null)
throw new InvalidOperationException("Could not parse Excel file xml data");
//get coodinates and size nodes
var locationNode = propertiesNode.SelectSingleNode("*[local-name() = 'off']");
var sizeNode = propertiesNode.SelectSingleNode("*[local-name() = 'ext']");
//create Rectangle
int x, y, w, h = 0;
x = int.Parse(locationNode.Attributes["x"].Value)/EMU;
y = int.Parse(locationNode.Attributes["y"].Value)/EMU;
w = int.Parse(sizeNode.Attributes["cx"].Value)/EMU;
h = int.Parse(sizeNode.Attributes["cy"].Value)/EMU;
return new Rectangle(x, y, w, h);
}
0
それはかなり残念です。あなたが本当に必要とする機能は、ファイルExcelDrawingBase.cs
のGetPixelTop
とGetPixelLeft
ですが、internal
:http://epplus.codeplex.com/SourceControl/latest#EPPlus/Drawing/ExcelDrawingBase.csとマークされています。ソースコードを変更せずに実際に呼び出すことはできません。
最も単純なのは、自分のバージョンを再作成することです。
public int DrawingPixelX(ExcelWorksheet worksheet, ExcelDrawing drawing)
{
const int emuPerPixel = ExcelDrawing.EMU_PER_PIXEL;
decimal mdw = worksheet.Workbook.MaxFontWidth;
var pix = 0;
for (var i = 1; i <= drawing.From.Column; i++)
pix += (int)decimal.Truncate(((256 * (decimal)worksheet.Column(i).Width + decimal.Truncate(128/mdw))/256) * mdw);
pix += drawing.From.ColumnOff/emuPerPixel;
return pix;
}
public int DrawingPixelY(ExcelWorksheet worksheet, ExcelDrawing drawing)
{
const int emuPerPixel = ExcelDrawing.EMU_PER_PIXEL;
var piy = 0;
for (var i = 1; i <= drawing.From.Row; i++)
piy += (int)(worksheet.Row(i).Height/0.75);
piy += drawing.From.RowOff/emuPerPixel;
return piy;
}
そして、あなたはこのようにそれを使用することができます:ここでは簡単カット/ペースト(生産井に行く前に、必ずQA作る)である
var workbook = package.Workbook;
var ws = workbook.Worksheets.First();
var pic = ws.Drawings.First();
Console.WriteLine(DrawingPixelX(ws, pic));
Console.WriteLine(DrawingPixelY(ws, pic));
私は141の左と上を取得し、 43添付画像用。
関連する問題
- 1. EPPlusを使用してExcelファイル(xlsx)を取得/読み込む方法
- 2. キャンバス内の画像の座標xyを取得する方法
- 3. 画像ピクセルの座標を取得するツール
- 4. 画像からピクセルのx、y座標の色を取得する方法は?
- 5. 画像のピクセル座標
- 6. 画像ボックスの下にある画像の座標を取得する方法
- 7. レイトレーシングのピクセル座標からuvw座標を取得する
- 8. キーボードアクセサリビュー内の画面の座標を取得する方法は?
- 9. EPPlus(C#)を使用してExcelファイル内のチェックボックスの状態を読み取る方法
- 10. jqueryまたはjavascriptを使用して画像の座標を取得する
- 11. SVGパスからピクセル座標を取得する方法String
- 12. C#座標を使用して画像を切り取る
- 13. OpenOffice Spreadsheetを使用してExcelファイルから画像を取得する方法
- 14. CropperJSによるクロップ画像の座標の取得方法は?
- 15. opencvを使用してキーポイントマッチングアルゴリズムで入力画像内のピクセル座標を検索しますか?
- 16. SDL2ピクセルの座標を取得
- 17. SQL Serverを使用してExcelファイル(.xlsx)形式をエクスポートする方法
- 18. 画像PlaceHoldersの座標の取得
- 19. Qt - マップする方法、座標を画像のピクセルにマップする
- 20. コアテキスト - NSRangeからピクセル座標を取得
- 21. 座標を使用したクロップ画像
- 22. サブ画像座標の取得方法は?
- 23. ズームしながら画像の座標を取得する方法
- 24. ピクセル座標をワールド座標に変換する方法は?
- 25. openCVを使用して画像の座標を入力する
- 26. イメージ画像でこの画像の白い座標を取得します
- 27. VNClassificationObservationからオブジェクトの矩形/座標を取得する方法
- 28. ズームモードでpictureboxの「画像」座標を取得する
- 29. mouseClickのx座標とy座標を取得する方法
- 30. 座標で地形のタイプを取得
どこから実際の番号(1045,451)を取得しましたか?あなたが1つの写真で作ったExcelファイルに対してあなたの機能を実行すると、あなたは実際に少し短くなります。私のテストでは、私の関数は、あなたの131を与える間に140の幅を与える。私は写真をちょうどCol Cを入れて、Excel AのCols AとBの幅を数えれば137になる.3ピクセルの違いは、 Col Cの開始点と画像との間のギャップ。私は自分の投稿を更新して、私の言いたいことを示しました。 2つの列の幅を同じ(たとえば65 px)に設定すると、両方の機能が131になることに注意してください。 – Ernie
私は2つの方法を使いました。第1は画面上の座標ツールを使用しています。xlsxファイル内の図面xmlファイルをチェックして、私の方法は両方の方法に基づいています。このソースhttp://officeopenxml.com/drwSp-size.phpによると、 'xfrm'タグの値は、EMU内の図形の座標とサイズを指定します。 – MusuNaji