Excel ファイルをテキスト エディターで読み取るには、CSV ファイル形式に変換する必要があります。これは、.xlsx Excel ドキュメント (2007 以降) が複雑な XML 階層であるためです。.xlsx ファイルの実際の構成を知りたい場合は、拡張子を .zip に変更してから解凍してください。
したがって、単純に .xlsx ファイルの拡張子を .txt または .csv に変更して、テキスト エディターで読み取れるようにすることはできません。最初からこのような形式でファイルを保存する必要があります。
Excel では、スプレッドシートを .xlsx ではなく .csv として保存すると、すぐにテキスト エディターで開くことができます。必要に応じて、拡張子を .txt に変更することもできます。
通常の XML 構造ではなくプレーン テキストとして Excel 自体を保存するように指示しないと、どれもうまくいきません。
.xlsx ファイルのサポートに固執している場合は、方法があります。Office XML ファイル形式はオープンで公開された形式であり、好きなように操作できます。
次のことを行う必要があります。
Open XML SDK をダウンロード
ドキュメントを注意深く読む
あなたの場合、おそらく特定のセル値にアクセスし、その内容を読み取り、それらを新しいファイルにストリーミングしたいと思うでしょう。
上記のドキュメントでは、Excel ドキュメントのセル値にアクセスするための次のコード スニペットを提供しています。
public static string XLGetCellValue(string fileName, string sheetName, string addressName)
{
const string worksheetSchema = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
const string sharedStringSchema = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
string cellValue = null;
// Retrieve the stream containing the requested
// worksheet's info.
using (SpreadsheetDocument xlDoc = SpreadsheetDocument.Open(fileName, false))
{
// Get the main document part (workbook.xml).
XmlDocument doc = new XmlDocument();
doc.Load(xlDoc.WorkbookPart.GetStream());
// Create a namespace manager, so you can search.
// Add a prefix (d) for the default namespace.
NameTable nt = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
nsManager.AddNamespace("d", worksheetSchema);
nsManager.AddNamespace("s", sharedStringSchema);
string searchString = string.Format("//d:sheet[@name='{0}']", sheetName);
XmlNode sheetNode = doc.SelectSingleNode(searchString, nsManager);
if (sheetNode != null)
{
// Get the relId attribute.
XmlAttribute relationAttribute = sheetNode.Attributes["r:id"];
if (relationAttribute != null)
{
string relId = relationAttribute.Value;
// Load the contents of the workbook.
XmlDocument sheetDoc = new XmlDocument(nt);
sheetDoc.Load(xlDoc.WorkbookPart.GetPartById(relId).GetStream());
XmlNode cellNode = sheetDoc.SelectSingleNode(string.Format("//d:sheetData/d:row/d:c[@r='{0}']", addressName), nsManager);
if (cellNode != null)
{
XmlAttribute typeAttr = cellNode.Attributes["t"];
string cellType = string.Empty;
if (typeAttr != null)
{
cellType = typeAttr.Value;
}
XmlNode valueNode = cellNode.SelectSingleNode("d:v", nsManager);
if (valueNode != null)
{
cellValue = valueNode.InnerText;
}
if (cellType == "b")
{
if (cellValue == "1")
{
cellValue = "TRUE";
}
else
{
cellValue = "FALSE";
}
}
else if (cellType == "s")
{
if (xlDoc.WorkbookPart.SharedStringTablePart != null)
{
XmlDocument stringDoc = new XmlDocument(nt);
stringDoc.Load(xlDoc.WorkbookPart.SharedStringTablePart.GetStream());
// Add the string schema to the namespace manager.
nsManager.AddNamespace("s", sharedStringSchema);
int requestedString = Convert.ToInt32(cellValue);
string strSearch = string.Format("//s:sst/s:si[{0}]", requestedString + 1);
XmlNode stringNode = stringDoc.SelectSingleNode(strSearch, nsManager);
if (stringNode != null)
{
cellValue = stringNode.InnerText;
}
}
}
}
}
}
}
return cellValue;
}
そこから、セル値で好きなことを行うことができます =)