Как я могу получить путь к файлу из этого типа URI контента?
blockquote>У вас нет, так как нет никакого файла вообще за
Uri
, не говоря уже о том, к которому вы можете получить доступ. ЭтоUri
может указывать на:
- Локальный файл на внешнем хранилище
- Локальный файл на внутренней памяти для другого приложения
- Локальный файл на съемном носителе
- Локальный файл, который зашифрован и должен быть дешифрован на лету
- Поток байтов, хранящихся в столбце
BLOB
в базе данных- Часть содержимого, которое должно быть загружено другим приложением первым
- ... и т. д.
Все другие приложения, такие как Facebook, Google+ это делает
blockquote>Нет, это не так. Они используют
ContentResolver
и:
openInputStream()
для чтения в байтах, связанных с содержимымgetType()
, чтобы получить тип MIME, связанный с содержимымquery()
иOpenableColumns
, чтобы получить размер и отображаемое имя, связанные с контентом
Если вы получаете сообщение об ошибке, в котором говорится, что «Объект не содержит определения для get_range».
Попробуйте следующее.
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.Range[sheet.Cells[1, 1], sheet.Cells[3,3]].Cells;
Столкнувшись с той же проблемой, я обнаружил, что самым быстрым решением было на самом деле отсканировать строки ячеек, которые я хотел отсортировать, определить последнюю строку с непустым элементом, а затем выбрать и отсортировать эту группу.
Dim lastrow As Integer
lastrow = 0
For r = 3 To 120
If Cells(r, 2) = "" Then
Dim rng As Range
Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6))
rng.Select
rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal
r = 205
End If
Next r
вы можете получить значение следующим образом
string str = (string)(range.Cells[row, col] as Excel.Range).Value2 ;
выбрать весь используемый диапазон
Excel.Range range = xlWorkSheet.UsedRange;
источник:
http: //csharp.net- informations.com/excel/csharp-read-excel.htm
пылающий
Данный ответ приведет к ошибке при использовании в библиотеке объектов Microsoft Excel 14.0. Объект не содержит определения для get_range. Вместо этого используйте
int countRows = xlWorkSheetData.UsedRange.Rows.Count;
int countColumns = xlWorkSheetData.UsedRange.Columns.Count;
object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2;
Где диапазон - несколько ячеек:
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,3]);
Где диапазон - одна ячейка:
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.Cells[1, 1];
Я нашел хороший короткий метод, который, кажется, хорошо работает ...
Dim x, y As Integer
x = 3: y = 5
ActiveSheet.Cells(y, x).Select
ActiveCell.Value = "Tada"
В этом примере мы выбираем 3 столбца сверху и 5 строк вниз, а затем помещаем «Тада» в ячейку.
UsedRange прекрасно работает с ячейками «virgins», но если ваши ячейки заполнены в прошлом, то UsedRange доставит вам старое значение.
Например:
«Подумайте в листе Excel, в котором ячейки A1 - A5 заполнены текстом». В этом сценарии UsedRange должен быть реализован следующим образом:
Long SheetRows;
SheetRows = ActiveSheet.UsedRange.Rows.Count;
Переменная watch to SheetRows должна отображать значение 5 после выполнения этой пары строк.
Q1: Но что произойдет, если значение A5 будет удалено?
A1: Значение SheetRows будет равно 5
Q2: Почему это?
A2: поскольку MSDN определяет свойство UsedRange как:
Получает объект Microsoft.Office.Interop.Excel.Range, который представляет все ячейки, в которых содержится значение в любое время.
Итак, вопрос в том, существует ли какой-либо / какой-нибудь обходной путь для этого поведения?
Я думаю, что в 2 альтернативах:
Long SheetRows;
SheetRows = ActiveSheet.Range("A1").CurrentRegion.Rows.Count;
Попробуйте это, работает!
Excel.Worksheet sheet = xlWorkSheet;
Excel.Series series1 = seriesCollection.NewSeries();
Excel.Range rng = (Excel.Range)xlWorkSheet.Range[xlWorkSheet.Cells[3, 13], xlWorkSheet.Cells[pp, 13]].Cells;
series1.Values = rng;
Если вы хотите, как Cells(Rows.Count, 1).End(xlUp).Row
, вы можете сделать это.
просто используйте следующий код:
using Excel = Microsoft.Office.Interop.Excel;
string xlBk = @"D:\Test.xlsx";
Excel.Application xlApp;
Excel.Workbook xlWb;
Excel.Worksheet xlWs;
Excel.Range rng;
int iLast;
xlApp = new Excel.Application();
xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1);
iLast = xlWs.Rows.Count;
rng = (Excel.Range)xlWs.Cells[iLast, 1];
iLast = rng.get_End(Excel.XlDirection.xlUp).Row;